whh*_*000 5 linux memory caching mmap linux-kernel
我有一个在内核中分配的硬件缓冲区。该缓冲区从 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我似乎无法获得相同的信息(我猜它可能都是相同的)。