在自定义HW上映射内存

时间:2014-09-18 12:05:55

标签: c++ linux memory mmap

我是使用mmap和映射硬件寄存器的新手,也许问题很简单。所以,我的问题是我们有一些自定义硬件,它有32位寄存器。一个要求是我必须使用mmap来确保快速的IO操作。

我在示例中看到人们使用dev / mem作为通用文件。这是一个好主意还是我应该创建自己的开发/自定义并将映射的内存放在那里?这样做有什么好处吗?

其次,是否有任何工具可以让我创建一个映射文件,比如开发/自定义或者如何做到这一点?

第三,如何确保偏移始终是页面大小的倍数?在我的情况下是4096字节。

我正在使用c ++和Linux。

1 个答案:

答案 0 :(得分:0)

这取决于您的硬件平台。对于intel PC,您可以执行端口IO和内存映射IO,对于ARM,您可以执行内存IO。

您应首先说明您支持的总线和配置,例如,是否可以使用PCI,USB或仅在特殊内存(SoC-way)上进行硬编码通信进行枚举?

最后要担心的是如何将设备(物理)内存实际映射到应用程序或驱动程序的地址空间。在linux上,你使用偏移量作为硬件的BAR(页面对齐)进行mmap,然后可以使用虚拟地址指针访问内存映射IO。 (您可能需要进一步调整缓存标志)