【发布时间】:2014-10-23 15:29:20
【问题描述】:
您好,我正在尝试实现一个 FPGA 加速器,通过 AXI 总线与 ARM 处理器集成。 FPGA 加速器包括一个 DMA,旨在移动输入数据(从内存)和输出数据(到内存)。一切都作为裸机应用程序运行,但我在 Linux 下遇到问题。
这个想法是用户空间进程必须提供输入数据并且必须读取输出数据。为了解决这个问题,我正在编写一个设备驱动程序,但我被困在从虚拟地址到物理地址的地址转换中。当我为 DMA 提供输入和输出基址时,我只能提供对我的目的无用的虚拟地址,因为我不知道如何将其转换为物理地址。结果,我从错误的内存位置读取和写入数据。我还认为与裸机的另一个区别是,在 linux 中数据可以碎片化,而在裸机中它们位于连续的内存区域中。
您对解决这些问题有什么建议或参考吗? 谢谢
【问题讨论】:
标签: linux memory arm driver dma