我和朋友正試圖爲高級操作系統類編寫虛擬設備的設備驅動程序(讀取:不是PCI或USB)。我們正在使用Ubuntu 16.04。我們的任務是在我們的驅動程序中調用IOCTL併爲它提供一個完整的RGB值(一個整數數組),一個空目標緩衝區和一個長度的源緩衝區。我們將調用DMA控制器將源緩衝區的內容傳輸到目標緩衝區,然後對目標緩衝區中的值應用線性轉換。是否可以在Linux中進行內存到內存的DMA傳輸?如果是這樣,什麼函數調用DMA來開始傳輸?
我們已經成功地完成了沒有DMA的轉換,並且我們已經成功地爲我們的設備分配了DMA通道。我們遇到的問題是我們似乎無法找到任何地方的功能,它描述了使用DMA啓動傳輸。我們希望在完成後引發中斷(驅動程序不應該等待傳輸完成)。
爲了清楚我們要求的內容,我們只想知道在哪裏可以找到描述此過程的函數的定義。我們不是要求代碼或完成此任務的確切方法;我們只想知道可以使用哪些函數和/或什麼頭文件來查找它們。我們已經通過linux/dma-mapping.h查看了看起來令人難以置信的內容。我們也研究了LDD3一段時間,但似乎完全通過建立DMA的過程,而沒有提供關於實際開始DMA傳輸的函數的信息。