使用mmap()时如何避免缓存

时间:2016-08-06 18:03:08

标签: linux caching linux-kernel zynq

我在petalinux中为FPGA中的设备编写了一个驱动程序,我已经实现了mmap功能,以便在用户空间中控制设备。我的问题是,如果我正在使用

vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);

在用户应用程序的mmap函数和MAP_SHARED标志中,似乎已启用缓存。

我做的测试是将值(比如5)写入我的mmaped设备的特定寄存器,该寄存器实际上只存储来自AXI总线的最低有效数据位。如果我在写入操作后立即读取,我希望读取1(这在Microblaze上使用裸机应用程序时发生),而不是我读取5.但是,值正确地写在寄存器中,因为必须发生的事情。 ..happens。

提前致谢。

1 个答案:

答案 0 :(得分:0)

根据问题评论中讨论的内容,此处指定了address指针:

address = mmap(NULL, PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

未使用类型限定符volatile声明,允许编译器对其进行预测,从而导致对读/写操作的潜在编译时优化。