作者:付汉杰,来源: 赛灵思中文社区论坛
在一个工程里,有两个Xilinx AXI DMA。其中一个AXI DMA设备是用于调试的。任何时候,其实只使用一个设备AXI DMA设备。
软件使用了bperez77_xilinx_axidma的内核和用户态驱动。bperez77_xilinx_axidma要求接收通道,和发送通道的xlnx,device-id不一样。因此在linux的设备树里,把每个AXI DMA设备的接收通道、发送通道的xlnx,device-id依次设置为了1、2、3、4。运行bperez77的用户态测试程序axidma_transfer时,报告错误。
跟踪代码,先是发现内核驱动程序分配内存失败,再继续下去,发现是因为xlnx,device-id大于了设备的通道数量(2),导致内核驱动报告错误。把两个AXI DMA设备的接收通道、发送通道的xlnx,device-id设置为0/1。再编译和测试,axidma_transfer不会报告错误。