2017-05-26 100 views
2
  1. 如上所述,dma引擎和dma控制器(專注於linux)有什麼區別?DMA-Engine和DMA-Controller有什麼區別?

  2. 什麼時候linux dma引擎到位?這是一個特殊的設備還是始終是支持dma的所有外圍設備的一部分?

  3. 當瀏覽linux源代碼時,我發現了驅動程序ste_dma40.c。任何驅動程序如何使用此引擎?

+1

1.您是在談論硬件IP或Linux術語? 2.同樣的問題。 3.它正在通過'DMAengine框架'使用。只需閱讀* Documentation/dmaengine/*以獲取更多信息。 – 0andriy

回答

2

DMA - 直接內存訪問。您的驅動程序可以讀取或寫入硬件內存,而不需要CPU參與其中(釋放它來完成其他任務)。

DMA控制器 - 讀寫不能用魔法來完成。如果CPU不這樣做,我們需要另一個硬件來完成。很多年前(在ISA/EISA時),在執行此操作的主板上使用共享HW是很常見的。近年來,每個硬件都有自己的DMA硬件機制。 但是在所有情況下,這個特定的硬件獲取源地址和目標地址並傳遞數據。通常在完成時觸發中斷。

DMA引擎 - 現在在這裏我不確定你的意思。我相信你可能會提及處理DMA的SW端。 由於所有存儲器的SRC和DST必須在DMA操作過程中始終物理存在,DMA比通常的I \ O稍微複雜一些。如果將DST地址交換到磁盤,硬件將寫入錯誤的地址,系統將崩潰。 DMA的這個和其他方面由驅動程序處理,代碼段可能稱爲「DMA引擎」

*有關DMA引擎的另一種解釋可能是固件(或硬件)處理硬件端的DMA硬件控制器。