Я следую этой структуре 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 +).
Любая идея ??
ли вы попробовать отдельное приложение (с SDK) просто чтобы убедиться, что HW работает должным образом? (Что-то простое, как чтение/массив записи) – Leos313
Как я сказал, внутренняя проверка dma_proxy работает правильно, так что HW работает должным образом, как я может выполнять переводы на пространство ядра. Проблема возникает, когда я пытаюсь выполнить перенос, отображающий буферы в пользовательском пространстве. –