mmap / dev / mem时缓存和易失性内存

时间:2017-01-11 16:19:29

标签: linux caching memory linux-kernel mmap

我有一个我在内核中分配的硬件缓冲区。该缓冲区从PCIe总线接收DMA数据。从用户空间我然后使用mmap /dev/mem将硬件缓冲区映射到我的虚拟地址空间。我的问题如下:

1)mmap如何处理缓存?

a)从阅读mmap开始,我理解当从用户空间写入映射区域时,我可能需要调用msync将缓存的内存版本刷新到'文件中。由于/dev/mem的实现方式与mmaped文件不同,我还需要msync我的写入吗?

b)由于我映射的内存是volatile内存(DMA硬件写入它),如何保持从这个内存中读取的同步?如果物理内存中的硬件发生了变化,那么我已经从用户空间写入了对缓存的更改,然后我msync我的更改以刷新我的写入,是由于我在写入时丢失的物理内存更改冲洗?

c)当mmaping /dev/mem我应该将返回的虚拟内存指针声明为volatile

我看到很多关于mmap缓存的文档,因为它与mmaping文件系统文件(不是易失性内存)有关,但是当谈到mmaping /dev/mem我似乎无法看到得到相同的信息(我猜可能都是一样的。)

1 个答案:

答案 0 :(得分:0)

使用O_SYNC打开/ dev / mem以进行未缓存的访问。我很难为此找到权威来源。