我是一名软件开发人员,但我是嵌入式软件开发的新手。我有一个板,它的硬件中有一个Axi DMA,我想从Linux访问这个DMA。我知道我应该使用DMA引擎来访问Linux中的DMA,并且我找到了以下链接,即Xilinx驱动程序,但是我无法在没有任何错误的情况下将这些文件添加到我的qt项目中,而且我收到的文件(头文件)没有找到错误。dma.c
我有一些关于DMA驱动程序、设备树和DMA引擎的分散信息,但是我不知道如何利用这些信息来访问硬件DMA。
我构建了一个Petalinux项目,并将DMA引擎和DMA测试客户端添加到内核中。
我不知道将DMAEngine添加到Petalinux项目是否足够,或者我也应该有一个驱动程序。
我不知道将硬件规范(通过.xsa文件和.bit文件)添加到Petalinux项目中就足够了,或者我也应该在Linux中添加一个设备树来检测DMA。
我一步一步地查找关于如何设置Linux和qt创建者来访问DMA的教程,或者至少有一个明确的目标路线图。
提前谢谢你。
发布于 2021-12-09 22:15:25
首先,在将xilinx_dma.c添加到Qt项目时会遇到错误,因为这个文件是作为内核的一部分或作为内核模块编译的。
将DMA引擎添加到Petalinux并不足以从用户空间使用DMA。DMA引擎只提供一个标准化的API,以便将不同的DMA集成到内核中。您还需要添加客户端驱动程序。据我所知,Xilinx提供了一个名为DMA代理驱动程序的简单客户端驱动程序。它还包括一些简单的示例,展示如何从用户空间访问DMA。但是,如果应用程序需要高带宽,则可能需要考虑其他选项。
与代理DMA驱动程序相比,Axi DMA还具有更高的带宽。它的用户空间API还允许您在事务完成时注册要调用的回调函数。
第三种选择是在用户空间中实现驱动程序。这可以通过将DMA定义为设备树中的UIO设备并直接从用户空间访问其寄存器映射来实现。在这种情况下,您需要在内核空间中分配一些连续的内存块,以避免MMU的复杂性,因为MMU无法从用户空间处理。
https://stackoverflow.com/questions/70277481
复制相似问题