gpt4 book ai didi

c++ - 在自定义硬件上映射内存

转载 作者:太空宇宙 更新时间:2023-11-04 03:52:19 29 4
gpt4 key购买 nike

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

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

其次,是否有任何工具可以让我创建映射文件,例如 dev/custom 或者如何做到这一点?

第三,如何确保偏移量始终是页面大小的倍数?在我的例子中是 4096 字节。

我使用的是 C++ 和 Linux。

最佳答案

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

您应该首先说明您支持什么总线和配置,例如,它可以通过 PCI、USB 进行枚举,还是仅在特殊内存(SoC 方式)上进行硬编码通信?

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

关于c++ - 在自定义硬件上映射内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25912156/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com