2017-01-03 27 views
1

Я следую этой структуре https://forums.xilinx.com/xlnx/attachments/xlnx/ELINUX/10693/1/Linux%20DMA%20from%20User%20Space-public.pdf для выполнения передачи данных с использованием DMA. Я использую AXI DMA без разбросанных сборок, при этом поток передачи зацикливается на поток приема . Кодами, которые я использую, являются следующие: dma_proxy.c, dma_proxy.h, dma_proxy_test.c. Я пытаюсь изменить u32 для u64, поскольку я работаю в 64-битной системе. Модуль ядра dma_proxy работает правильно и выполняет INTERNAL_TEST правильно, но когда я пытаюсь читать/писать на ДМА буферов после их отображения на пользовательском приложении я получаю эту ошибку:Linux DMA от ошибки пользовательской космической шины

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

В addtition в соответствии с рамками я должен смотреть буферы DMA на Kernel Mapping Area, когда я экспортировать ядра pagetable, но я получить его на 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 доска от Xilinx (Zynq Ultrascale +).

Любая идея ??

+0

ли вы попробовать отдельное приложение (с SDK) просто чтобы убедиться, что HW работает должным образом? (Что-то простое, как чтение/массив записи) – Leos313

+0

Как я сказал, внутренняя проверка dma_proxy работает правильно, так что HW работает должным образом, как я может выполнять переводы на пространство ядра. Проблема возникает, когда я пытаюсь выполнить перенос, отображающий буферы в пользовательском пространстве. –

ответ

0

У меня есть проблема с помощью Xilinx Suppornt. Это функция mmap для кода драйвера, которая использует dma_common_mmap, а не dma_mmap_coherent, которая должна использоваться для mmap областей памяти, выделенных dmam_alloc_coherent.