一、方案:
1、AXI-DMA模式1(直接寄存器模式,UIO + DMA双缓存):
【硬件】:PL侧的FPGA的AXI DMA的S2MM接口直接连接到PS侧的HP接口(FPGA数据直接进出DDR,不经过CPU的cache)或者ACP接口(FPGA数据通过SCU进入CPU的cache,硬件自动处理cache一致性问题,不需要软件处理cache一致性问题)。
【驱动】:直接使用UIO驱动模块(generic_uio),/dev/uio0来控制AXI-DMA开启;
dts中reserved-mem开辟dma的一段缓存dma_buff,用于数据接收;
【应用】:mmap(/dev/mem)映射ddr-dma区域;
中断或轮询方式,判断/dev/uio的数据状态(中断方式唤醒read阻塞)来读取传输数据,以及用户态控制DMA的开启。
【优势】:方便用户态快速开发。
2、AXI-DMA模式2(SG模式,自定义驱动和BD数据):
【硬件】:PL侧的FPGA的AXI DMA的S2MM接口直接连接到PS侧的ACP或者HP接口。
【驱动】:编写独立的驱动模块,实现功能:
1、SG模式(数据包长度不固定,链表方式管理内存块)或者非SG模式的DMA空间;
2、dma_alloc_coherent()分配一致性内存空间;
3、mmap()创建用户空间的内存映射;
4、数据状态的通知机制(poll 或者 FPGA硬件握手)
【应用】:mmap映射fd设备。
【优势】:方便驱动中进行复杂控制。