由于对速度的一些要求,我们需要在内部存储器上进行一些计算,然后将计算结果DMA到外部存储器。该应用程序运行在TI DM355处理器上,该处理器基于ARM926EJ-S内核和一组TI外设(EDMA,视频加速器等)。
从应用程序中可以做到多么干净?是否像上述内部存储器地址mmap到虚拟空间并进行计算一样简单?
由于
答案 0 :(得分:3)
你可以mmap / dev / mem设备:
int mem_fd = open("/dev/mem", O_RDWR);
void *buffer = mmap(NULL, mem_segment_length, PROT_READ | PROT_WRITE, MAP_SHARED,
mem_fd, mem_segment_addr);
close(mem_fd);
/* buffer now points to your device's memory */
/* remember to call msync after writing to this to force changes to write back to
* /dev/mem */
但是,根据您的需要,这可能还不够。 Another question这里有更深入的答案,但你可能最好在内核模块中这样做。
答案 1 :(得分:0)
我认为这需要一定程度的内核和/或驱动程序支持。如果您使用的是特定于您的平台的Linux发行版,则可能已经提供了一些内容。检查您可能拥有的任何文档或示例代码。
我确实找到了一篇关于如何在这里实际进行映射的文章:
http://www.simtec.co.uk/appnotes/AN0014/
这是用于访问GPIO寄存器,但代码应该与片上存储器相同,具有不同的地址。当然,如果其他东西已经在使用那个空间,如果你只是映射它并开始修改它就会崩溃,因此可能需要更多的文档挖掘。你有系统的内核内存映射吗?
答案 2 :(得分:0)
另外,我记得可以将页面固定在内存中。如果我错了,请纠正我。