Je suis ce cadre https://forums.xilinx.com/xlnx/attachments/xlnx/ELINUX/10693/1/Linux%20DMA%20from%20User%20Space-public.pdf pour effectuer une transmission de données à l'aide d'un DMA. J'utilise AXI DMA sans rassemblement de diffusion, avec le flux de transmission en boucle sur le flux de réception . Les codes que j'utilise sont les suivants: dma_proxy.c, dma_proxy.h, dma_proxy_test.c. J'ai essayé de changer le u32 pour u64 pendant que je travaille dans un système 64bits. Le module du noyau dma_proxy fonctionne correctement et effectue le INTERNAL_TEST correctement, mais lorsque je tente de lecture/écriture sur les tampons de dma après les mappant sur l'application utilisateur i obtenir cette erreur:Linux DMA à partir de l'erreur User Space Bus
DMA proxy test
[ 397.889331] Unhandled fault: level 3 address size fault (0x92000043) at 0x0000007f94d4b004
Bus error
Dans addtition selon le cadre je devrais regarder les tampons DMA sur le noyau cartographie des zones quand j'exporter PageTable noyau, mais je l'obtenir sur vmalloc() Superficie:
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
les fichiers sont de ce poste: https://forums.xilinx.com/t5/Embedded-Linux/BRAM-DMA-transfer-limitation/m-p/555953#M11603 Je suis en cours d'exécution sur une évaluation de zcu102 Conseil de Xilinx (Zynq Ultrascale +).
Une idée?
Avez-vous essayé une application autonome (avec SDK) juste pour vérifier que le HW fonctionne correctement? (Quelque chose de simple comme le tableau de lecture/écriture) – Leos313
Comme je l'ai dit, le test interne de dma_proxy fonctionne correctement, donc le HW fonctionne correctement. peut effectuer des transferts sur l'espace noyau. Le problème se produit lorsque j'essaie d'effectuer le transfert mappant les tampons sur l'espace utilisateur. –