在Linux中访问无法访问的内存的正确方法

时间:2013-03-19 02:34:33

标签: linux-kernel linux-device-driver embedded-linux

我的方案如下:

  • 一块板充当PCIE Rootport(RP),一块板充当PCIE 终点(EP)。
  • PCIE端点导出了一个内存区域。这个 内存区域在RP和EP之间共享。每当我们需要时 访问这个共享内存区域(实际上我们只是访问第一个 该区域中的字节控制数据结构很少)。我们要做一个 写入后读取和刷新缓存的缓存无效。
  • 我试图将结构声明如下,但没有invalidate / flush 缓存,读/写不起作用。

    typedef volatile struct {     u32前面;     u32后方;     u32 n_msg;     u32偏移; } queue_ctl_t;

请有人告诉我访问此共享内存区域的正确方法。我只是想知道一些网络驱动程序(对于PCIE总线上的网卡)如何能够在不执行无效/刷新缓存的情况下一致地访问数据。 任何建议都表示赞赏,非常感谢!

1 个答案:

答案 0 :(得分:1)

您应该使用ioremap_nocache()映射相关内存区域,并使用ioread*()iowrite*()函数读取/写入它们。