2017-01-03 44 views
1

我遵循此框架https://forums.xilinx.com/xlnx/attachments/xlnx/ELINUX/10693/1/Linux%20DMA%20from%20User%20Space-public.pdf来执行使用DMA的数据传输。我使用AXI DMA而没有 scatter gather,发送流循环回到接收 流。我使用的代码如下:dma_proxy.c, dma_proxy.h,dma_proxy_test.c。 我试图改变U64为U64,因为我在64位系统worknig。 的dma_proxy内核模块正常工作,正确执行INTERNAL_TEST,但是当我尝试对用户应用程序映射他们回来之后要放在DMA缓冲区读/写我得到这个错误:根据框架来自用户空间总线的Linux DMA错误

DMA proxy test 
[ 397.889331] Unhandled fault: level 3 address size fault (0x92000043) at 0x0000007f94d4b004 
Bus error 

在addtition我应该看在内核映射区的DMA缓冲区,当我出口内核页表,但我得到它vmalloc的()面积:

0xffffff80012c5000-0xffffff80012cd000   32K  RW NX SHD AF   UXN MEM/NORMAL-NC 
0xffffff80012ce000-0xffffff80015cf000  3076K  RW NX SHD AF   UXN MEM/NORMAL-NC 
0xffffff80015d0000-0xffffff80015d8000   32K  RW NX SHD AF   UXN MEM/NORMAL-NC 
0xffffff80015d9000-0xffffff80018da000  3076K  RW NX SHD AF   UXN MEM/NORMAL-NC 

的文件是从这个帖子:https://forums.xilinx.com/t5/Embedded-Linux/BRAM-DMA-transfer-limitation/m-p/555953#M11603 我在zcu102评估运行来自赛灵思(Zynq Ultrascale +)的电路板。

任何想法??

+0

你试过一个独立的应用程序(与SDK),只是为了验证硬件工作正常吗?(像读/写阵列一样简单) – Leos313

+0

正如我所说,dma_proxy的内部测试正常工作,所以硬件正常工作,因为我可以在内核空间上执行传输。当我尝试执行传输映射用户空间上的缓冲区时发生问题。 –

回答

0

我已通过Xilinx Suppornt的帮助解决了我的问题。它是使用dma_common_mmap而不是dma_mmap_coherent的驱动程序代码mmap函数,它应该用于映射由dmam_alloc_coherent分配的内存区域。