DMA-Engine 和 DMA-Controller 有什么区别?

What is the difference between DMA-Engine and DMA-Controller?

  1. 如上所述,dma引擎和dma-controller有什么区别(重点在linux)?

  2. linux dma 引擎什么时候到位?这是一个特殊的设备还是所有支持dma的外围设备的一部分?

  3. 在浏览 linux 源代码时,我找到了 driver ste_dma40.c。 any driver 如何使用这个引擎?

DMA - 直接内存访问。您的驱动程序读取或写入 from/to 您的硬件内存的操作没有 CPU 参与其中(释放它做其他事情)。

DMA 控制器 - 读写不能靠魔法完成。如果 CPU 不这样做,我们需要另一个硬件来做。许多年前(在 ISA/EISA 的时候),在执行此操作的主板上使用共享 HW 是很常见的。近年来,每个HW都有自己的DMA HW机制。 但在所有情况下,这个特定的 HW 都会获取源地址和目标地址并传递数据。通常在完成时触发中断。

DMA 引擎 - 现在我不确定你的意思。我相信您可能指的是处理 DMA 的 SW 端。 DMA 比通常的 I\O 稍微复杂一些,因为在 DMA 操作期间,所有内存 SRC 和 DST 都必须始终物理存在。如果 DST 地址被交换到磁盘,HW 将写入错误地址,系统将崩溃。 DMA 的这个和其他方面由驱动程序处理,您可能将代码部分称为 "DMA Engine"

*'DMA Engine' 的另一种解释可能是固件(或硬件)的代码部分,它在硬件端处理 DMA 硬件控制器。

根据这份文件,http://www.asprom.com/application/intel_3.pdf

82C37 DMA 控制器不应该 与找到的 DMA 引擎混淆 在一些早期的 MCH(内存控制器 集线器)组件。这些 DMA 控制器 连接到 ISA/LPC 总线并使用 主要用于传输 to/from 慢 软盘控制器等设备。

所以它似乎是在以前使用 MCH 设备的平台上找到的设备。