2017-01-03 1 views
1

DMA를 사용하여 데이터 전송을 수행하려면이 프레임 워크 https://forums.xilinx.com/xlnx/attachments/xlnx/ELINUX/10693/1/Linux%20DMA%20from%20User%20Space-public.pdf을 따르고 있습니다. 분산 수집없이 AXI DMA를 사용 중이며 전송 스트림이 다시 수신되어 스트림으로 반복됩니다. 내가 사용하고있는 코드는 다음과 같습니다 : dma_proxy.c, dma_proxy.h, dma_proxy_test.c. 저는 64 비트 시스템에서 worknig로 u64 용 u32를 변경하려고합니다. dma_proxy 커널 모듈이 제대로 작동하고 올바르게 INTERNAL_TEST을 수행하지만 내가 사용자 응용 프로그램에 그들을 매핑 후 DMA 버퍼에 읽기/쓰기 할 때이 오류 얻을 : 프레임 워크에 따라 addtition에서사용자 공간 버스 오류로 인한 Linux DMA

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

을 내가 커널 페이지 테이블을 내보낼 때 내가 커널 매핑 지역에 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

HW가 제대로 작동하는지 확인하기 위해 SDK가있는 독립 실행 형 응용 프로그램을 사용해 보았습니까? (읽기/쓰기 어레이와 같은 간단한 것) – Leos313

+0

dma_proxy의 내부 테스트가 올바르게 작동하므로 HW가 올바르게 작동합니다. 커널 공간에서 전송을 수행 할 수 있습니다. 이 문제는 사용자 공간의 버퍼 매핑 매핑을 수행하려고 할 때 발생합니다. –

답변

0

자일링스 Suppornt의 도움으로 문제를 해결했습니다. dma_mmap_coherent가 아닌 dma_common_mmap을 사용하는 것은 드라이버 코드 mmap 기능입니다. dma_mmap_coherent는 dmam_alloc_coherent가 할당 한 메모리 영역을 mmap하기 위해 사용해야합니다.