DMA 引擎和 DMA 控制器有什么区别?


  1. 如上所述,dma引擎和dma控制器(专注于Linux)有什么区别?

  2. Linux dma 引擎何时到位?这是一个特殊的设备还是始终是支持 DMA 的所有外围设备的一部分?

  3. 浏览 linux 源代码时,我发现驱动程序 ste_dma40.c。任何驱动程序如何使用此引擎?

DMA - 直接内存访问。驱动程序从硬件内存读取或写入的操作,而无需 CPU 参与其中(释放它以执行其他操作)。

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

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

*对"DMA 引擎"的另一种解释可能是固件(或硬件)的代码部分,用于处理硬件端的 DMA 硬件控制器。

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

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

因此,它似乎是在以前使用MCH设备的平台上发现的设备。

最新更新