我是一名电子工程师,在 uni 的一个项目中,我正在 FPGA (Xilinx ZYNQ) 上开发硬件辅助图像/视频过滤,该设备内部还有一个双核 ARM A9 处理器,更重要的是还有一个ARM Primecell PL330 DMA Controller
我正在使用 Yocto 构建一个基本的 linux 环境,我可以在具有 Xilinx 的自定义内核内核分支的处理器上使用它。
现在,如果我理解正确,我不能直接使用内核 DMA API,但我必须编写自定义内核驱动程序,这就是问题所在,因为我没有足够的内核知识来能够这样做(特别是为自定义模块设置构建环境)...
那么是否有某种库/API/任何东西真的可以从用户空间进行 DMA 传输? (特别是从内存到内存映射外设(zynq 上 PS 和 PL 之间的 AXI4 端口)
更新
经过一些深夜试验,我得到了一个基本的 hello world 内核模块,可以正确加载,所以我想我会走正确的路,写一个小的设备驱动程序 shim,它从用户空间获取大量数据(部分在这种情况下的图像)并将其传递给 FPGA 部分,如果 IC 槽 DMA api
我会报告我的成功或失败 ;)
最佳答案
一个可能的选择是使用 UIO interface (另见 blog article )
链接中有一些示例代码,但代码的一般结构是:
- 你有一个小内核模块来处理 IO 初始化并公开 DMA。 (参见 documentation)
- 然后您的用户空间程序会处理您需要的所有 IO 以使其正常工作。 (另见 example code)
因为你没有指定你想做什么我不能更具体。 但是您需要弄清楚如何在内核中初始化内存(有关 LDD3 很棒的文档,请参阅标签 wiki)。
关于c - 在 Linux 中使用 DMA 的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34188369/