2017-05-26 90 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硬件控制器。