来自用户空间的内核驱动程序和mmap

时间:2016-02-29 12:58:03

标签: c linux linux-kernel

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

但是,如果我在用户进程中mmap,如下所示:mmap(NULL, size, PROT_WRITE, MAP_SHARED, fd, 0),使用相同的文件fd并尝试写入返回的内存空间,则不会将任何内容写入驱动程序内存。

我忘记了什么吗?

1 个答案:

答案 0 :(得分:2)

知道了!我做错了。我必须设置vm系统才能正确处理mmap,这必须使用fb_deferred_io完成(直到我启用了一些选择它的无关驱动程序时我才会这样做)。然后我不得不使用__get_free_pages而不是devm_kzmalloc(),最后一个细节是在为fbdev子系统分配屏幕缓冲区指针时使用__pa(vmem)。然后它开始工作:-)

相关问题