Linux kernel DMA的工作原理——在ARM中——使用linux

Linux kernel DMA的工作原理——在ARM中——使用linux,linux-kernel,arm,embedded-linux,dma,Linux Kernel,Arm,Embedded Linux,Dma,一些Linux DMA专家能帮我吗。。。理解这个概念 a> 我是DMA编程新手。DMA是如何为ARM控制器工作的 b> 如果我们使用mmap向驱动程序发送数据。我们如何将其与DMA同步 c> 要使用DMA,我们在软件中必须做什么 d> 这个dma输入输出通道是什么 是否有一些示例代码。。作为DMA的新手,理解这个概念对我很有帮助。a>ARM对DMA并不严格,大多数制造商都有不同的实现,并且在各自设备的内核中都有自己的驱动程序。其中一些甚至不称之为DMA(DMOV,DataMover实际上是Qco

一些Linux DMA专家能帮我吗。。。理解这个概念

a> 我是DMA编程新手。DMA是如何为ARM控制器工作的

b> 如果我们使用mmap向驱动程序发送数据。我们如何将其与DMA同步

c> 要使用DMA,我们在软件中必须做什么

d> 这个dma输入输出通道是什么


是否有一些示例代码。。作为DMA的新手,理解这个概念对我很有帮助。

a>ARM对DMA并不严格,大多数制造商都有不同的实现,并且在各自设备的内核中都有自己的驱动程序。其中一些甚至不称之为DMA(DMOV,DataMover实际上是Qcom的SOC上的DMA单元)

b> 我不确定用户空间是否可以访问DMA,您需要内核的帮助才能做到这一点。此外,大多数DMA仅发生在为DMA保留的特殊区域中,该区域在MMU页表中标记为未缓存,以防止同步问题

c> 您无法访问DMA控制器,硬件是由内核抽象的,大多数制造商使用不同的API,尽管有一个显著的尝试是将此类非标准实现转移到内核的标准DMA驱动程序模型


d> 我不明白你的问题。

我在搜索引擎中键入“linux arm dma”找到了大量信息。也许你可以指出你看到了什么,以及你不明白的地方是什么?ARM没有标准的DMA控制器,它包括许多版本的处理器、SOC和UController。示例代码可以在内核源代码树中找到