2016-02-29 36 views
2

我在我的驱动程序中使用devm_kzalloc(.., .., GFP_KERNEL)分配缓冲区,然后我将此缓冲区注册为帧缓冲区驱动程序,以便它显示为/dev/fb0下的文件。然后我可以打开这个文件并写入它。当我这样做时,一切正常,我的数据到达驱动程序内存缓冲区。内核驱动程序和用户空间的mmap

但是,如果我然后mmap它在用户进程中是这样的:mmap(NULL, size, PROT_WRITE, MAP_SHARED, fd, 0),使用相同的文件fd并尝试写入返回的内存空间,没有任何写入驱动程序内存。

我在这里忘了什么吗?

+1

http://man7.org/linux/man-pages/man2/mmap.2.html - 仔细阅读MAP_SHARED段落,那里可能有线索。 – Mat

回答

2

Got it!我所做的一切都是错误的。我必须设置vm系统才能正确处理mmap,并且必须使用fb_deferred_io(我甚至没有启用一些不相关的驱动程序选择它)之前完成。然后,我必须使用__get_free_pages而不是devm_kzmalloc(),最后一个细节是在为fbdev子系统分配屏幕缓冲区指针时使用__pa(vmem)。然后它开始工作:-)

相关问题