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

6
  1. 如上所述,dma引擎和dma控制器有什么区别(重点关注linux)?

  2. Linux dma引擎何时生效?这是一种特殊设备还是所有支持dma的外围设备都包含它?

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


1
  1. 你是在谈论硬件IP还是Linux术语?
  2. 同样的问题。
  3. 它是通过DMAengine框架使用的。有关更多信息,请阅读*Documentation/dmaengine/*。
- 0andriy
2个回答

13

直接内存访问(DMA)- 是指驱动程序从/向硬件内存读取或写入数据的操作,而不需要CPU参与其中(使其空闲以做其他事情)。

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

DMA引擎 - 这里我不确定你指的是什么。我认为你可能指的是处理DMA的软件方面。 DMA比通常的I/O复杂一些,因为在DMA操作期间,所有内存SRC和DST都必须始终存在于物理上。如果DST地址被交换到磁盘,硬件将写入错误的地址,系统将崩溃。 驱动程序通过代码段来处理DMA的这些方面,你可能将其称为“DMA引擎”。

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


如果DST地址被交换到磁盘,硬件将会写入错误的地址,系统将会崩溃。这样的“坏地址”只会出现在虚拟内存中。更常见的DMAC使用物理内存地址,这些地址不会出现问题。否则,可以通过简单地要求锁定内存区域来避免此问题,即在DMA操作期间无法更改虚拟内存到物理内存的映射。 - sawdust

3
根据这份文档http://www.asprom.com/application/intel_3.pdf
82C37 DMA控制器不应与某些早期MCH(内存控制器中枢)组件中发现的DMA引擎混淆。这些DMA控制器与ISA / LPC总线相连,主要用于与诸如软驱控制器之类的缓慢设备之间的传输。
因此,它似乎是在前期使用了MCH设备的平台上发现的设备。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接