如上所述,dma引擎和dma控制器有什么区别(重点关注linux)?
Linux dma引擎何时生效?这是一种特殊设备还是所有支持dma的外围设备都包含它?
在浏览Linux源代码时,我发现了驱动程序ste_dma40.c。任何驱动程序如何使用此引擎?
如上所述,dma引擎和dma控制器有什么区别(重点关注linux)?
Linux dma引擎何时生效?这是一种特殊设备还是所有支持dma的外围设备都包含它?
在浏览Linux源代码时,我发现了驱动程序ste_dma40.c。任何驱动程序如何使用此引擎?
直接内存访问(DMA)- 是指驱动程序从/向硬件内存读取或写入数据的操作,而不需要CPU参与其中(使其空闲以做其他事情)。
DMA控制器 - 读写操作不能通过魔法完成。如果CPU不执行这些操作,我们就需要另一种硬件来完成它们。很多年前(在ISA/EISA时代),通常使用共享的主板上的硬件来完成此项操作。近年来,每个硬件都有自己的DMA硬件机制。但是,在所有情况下,这个特定的硬件会获得源地址和目标地址并传输数据。通常在完成时触发中断。
DMA引擎 - 这里我不确定你指的是什么。我认为你可能指的是处理DMA的软件方面。 DMA比通常的I/O复杂一些,因为在DMA操作期间,所有内存SRC和DST都必须始终存在于物理上。如果DST地址被交换到磁盘,硬件将写入错误的地址,系统将崩溃。 驱动程序通过代码段来处理DMA的这些方面,你可能将其称为“DMA引擎”。
*对于“DMA引擎”的另一种解释可能是固件(或硬件)的代码部分,用于处理硬件侧的DMA控制器。
DMAengine框架
使用的。有关更多信息,请阅读*Documentation/dmaengine/*。