我是使用mmap和映射硬件寄存器的新手,也许问题很简单。所以,我的问题是我们有一些自定义硬件,它有32位寄存器。一个要求是我必须使用mmap来确保快速的IO操作。
我在示例中看到人们使用dev / mem作为通用文件。这是一个好主意还是我应该创建自己的开发/自定义并将映射的内存放在那里?这样做有什么好处吗?
其次,是否有任何工具可以让我创建一个映射文件,比如开发/自定义或者如何做到这一点?
第三,如何确保偏移始终是页面大小的倍数?在我的情况下是4096字节。
我正在使用c ++和Linux。
答案 0 :(得分:0)
这取决于您的硬件平台。对于intel PC,您可以执行端口IO和内存映射IO,对于ARM,您可以执行内存IO。
您应首先说明您支持的总线和配置,例如,是否可以使用PCI,USB或仅在特殊内存(SoC-way)上进行硬编码通信进行枚举?
最后要担心的是如何将设备(物理)内存实际映射到应用程序或驱动程序的地址空间。在linux上,你使用偏移量作为硬件的BAR(页面对齐)进行mmap,然后可以使用虚拟地址指针访问内存映射IO。 (您可能需要进一步调整缓存标志)