【发布时间】:2016-03-15 06:58:10
【问题描述】:
我是一名 EE,对于 uni 的一个项目,我正在 FPGA (Xilinx ZYNQ) 上开发硬件辅助图像/视频过滤,所述设备内部还有一个双核 ARM A9 处理器,更重要的是还有一个ARM Primecell PL330 DMA 控制器
我正在使用 Yocto 构建一个基本的 linux 环境,我可以在带有 Xilinx 的自定义内核内核分支的处理器上使用它。
现在,如果我理解正确,我不能直接使用内核 DMA API,但我必须编写一个自定义内核驱动程序,问题就在这里,因为我没有足够的内核知识能够这样做(特别是为自定义模块设置构建环境)...
那么是否有某种库/API/任何东西真的可以从用户空间进行 DMA 传输? (特别是从内存到内存映射外设(zynq 上 PS 和 PL 之间的 AXI4 端口)
更新
经过深夜的实验,我得到了一个基本的 hello world 内核模块,可以正确加载,所以我想我会走正确的路,写一个小的设备驱动 shim,它从用户空间获取大量数据(部分在这种情况下为图像),如果 IC 通过 DMA api 将其传递给 FPGA 部分
我会报告我的成功或失败;)
【问题讨论】:
-
你没有说它是连接的。是PCIe吗? USB? UNIBUS?
-
@stark 以上都不是;它直接映射到内存中。 Zynq 是一个不寻常的设备。 :)
-
好吧,我猜我应该解释得更好;)在 ZYNQ 臂处理器和 FPGA 上位于同一个硅芯片上,它们通过 AXI 总线连接; AXI 是 ARM 控股的 BUS 协议,它是 AMBA 4 的版本
-
内核中DMA引擎的驱动已经很久了。在您的案例中,您必须了解谁是 DMA 资源的客户。看起来您正在 FPGA 上实现特定的 IP,因此,您必须为该 IP 编写驱动程序。如果它是用户空间驱动程序,您仍然需要编写一些可以为您的用户空间驱动程序提供硬件资源的东西。
-
请记住,您还需要考虑缓存一致性。
标签: c linux-kernel linux-device-driver embedded-linux xilinx