当前位置: 技术问答>linux和unix
关于linux 共享内存,缓存的问题
来源: 互联网 发布时间:2016-03-23
本文导语: 我在驱动里(内核态)用__get_free_pages 开辟了一块大小为8*1024的共享内存,然后用户程序通过mmap得到这个内存的地址,这块内存用于和用户程序的通信。但是我发现一个问题,驱动里向这块内存写数据后,用户程序...
我在驱动里(内核态)用__get_free_pages 开辟了一块大小为8*1024的共享内存,然后用户程序通过mmap得到这个内存的地址,这块内存用于和用户程序的通信。但是我发现一个问题,驱动里向这块内存写数据后,用户程序马上向这块内存读数据,读出的内容不一定马上是驱动写进去的内容。 比如说,之前我在驱动里向这块内存首地址写入的是 0x1234, 过了一会后写入0x2345,这时读出来的有时候会是0x1234,但是几秒后再读,又变成0x2345了,我想不出会是什么问题。 我用户程序是通过定义一个 cha *p,来指向这块内存首地址的,后来我改了定义,用 volatile cha *p ,发现问题还是一样,请明白的指点一下 谢谢了!
|
可能是同步问题,LZ你的驱动和用户空间程序是如何同步的?
|
可以试试刷新共享内存的内容 fflush(get_free_pages )
|
用户空间的mmap对应于内核空间的file_operations里的mmap接口。标准的系统调用啊。
|
尝试一下ioremap_nocache函数看看吧