1. 程式人生 > >Linux下DMA驅動框架

Linux下DMA驅動框架

  • 啟動傳輸

    dmaengine_issue_pending呼叫會從第一個描述符開始進行傳輸。如果DMA 裝置驅動有回撥函式的話,會在傳輸完成後執行。

    下面介紹一下獲得傳輸描述符的三種方式。

    device_prep_dma_memcpy(),明顯是DMA記憶體到記憶體的拷貝

    有些DMA支援分散集合模式,即記憶體中資料並非連續,這中情況可以呼叫通過device_prep_slave_sg函式進行傳輸,描述符是一個單向列表,描述了每塊資料的位置和大小還有其他配置。DMA自行解析描述符的內容進行資料傳輸並尋找下一個連結串列節點。

    如果是迴圈連線,則傳輸被叫做迴圈傳輸,需要用到device_prep_dma_cyclic()函式進行傳輸,例如linux下的串列埠驅動,它的傳輸buffer是一個環形緩衝區,它用DMA傳輸時就採用了迴圈傳輸方式。