在自定义硬件上映射内存
Mapping memory on custom HW
我是使用mmap和映射HW寄存器的新手,也许问题很简单。所以,我的问题是,我们有一些自定义硬件,它有32位寄存器。一个要求是我必须使用mmap来确保快速的IO操作。
我在示例中看到,人们将dev/mem用作通用文件。这是个好主意吗?还是我应该创建自己的dev/custom并将映射的内存放在那里?这样做有什么好处吗?
其次,有没有任何工具可以让我创建一个映射文件,比如dev/custom,或者如何做到这一点?
第三,如何确保偏移量始终是页面大小的倍数?在我的情况下,这是4096字节。
我使用的是c++和Linux。
这取决于您的硬件平台。对于英特尔PC,您可以执行端口IO和内存映射IO,对于ARM,您可以进行内存IO。
您应该首先说明您支持的总线和配置,例如,它可以用PCI、USB枚举,或者只是在特殊内存中进行硬编码通信(SoC方式)?
最后要担心的是如何将设备(物理)内存实际映射到应用程序或驱动程序的地址空间。在linux上,使用偏移量作为硬件的BAR(页面对齐)进行mmap,然后可以使用虚拟地址指针访问内存映射的IO。(您可能需要进一步调整缓存标志)
相关文章:
- 添加静态constexpr成员是否会更改结构/类的内存映射
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 字符串共享内存映射的向量
- 准确了解对象在内存中的映射方式
- 将布局映射到内存地址
- 确保内存映射页位于内存中
- <char> 使用 Vulkan 映射内存时如何使用 std::vector 而不是 void**?
- 我可以将新的 std::tuple 放入内存映射区域,并在以后读回吗?
- C++从 Java 角度设置和映射内存管理
- 如何在 OpenCL 中使用缓冲区分配和映射内存机制
- 两个进程之间的共享映射内存在编辑时未更新
- 频繁访问文件映射内存
- 由于动态数组而导致的哈希映射内存泄漏
- 映射和多映射:内存使用/管理差异
- 在自定义硬件上映射内存
- 内存映射内存是否可能
- 具有动态分配内存和映射内存的Shared_ptr
- mmap小尺寸内存,当munmap为glibc时,会将映射内存释放到操作系统
- C++ 标准::映射内存管理