C 来自用户空间的内核驱动程序和mmap
我正在使用C 来自用户空间的内核驱动程序和mmap,c,linux,linux-kernel,C,Linux,Linux Kernel,我正在使用devm_kzalloc(..,..,GFP_KERNEL)在我的驱动程序中分配一个缓冲区,然后我将此缓冲区注册为帧缓冲区驱动程序,以便它显示为/dev/fb0下的文件。然后我可以打开这个文件并写入它。当我这样做时,一切正常,数据到达驱动程序内存缓冲区 但是,如果我随后在用户进程中使用mmapmmap(NULL,size,PROT\u WRITE,MAP\u SHARED,fd,0),使用相同的文件fd并尝试写入返回的内存空间,则不会将任何内容写入驱动程序内存 我忘了什么吗 明白了!我
devm_kzalloc(..,..,GFP_KERNEL)
在我的驱动程序中分配一个缓冲区,然后我将此缓冲区注册为帧缓冲区驱动程序,以便它显示为/dev/fb0
下的文件。然后我可以打开这个文件并写入它。当我这样做时,一切正常,数据到达驱动程序内存缓冲区
但是,如果我随后在用户进程中使用mmap
mmap(NULL,size,PROT\u WRITE,MAP\u SHARED,fd,0),使用相同的文件fd并尝试写入返回的内存空间,则不会将任何内容写入驱动程序内存
我忘了什么吗 明白了!我完全做错了。我必须设置虚拟机系统以正确处理mmap,这必须使用fb_deferred_io来完成(在启用一些选择它的无关驱动程序之前,我甚至没有)。然后我不得不使用uu get_free_pages而不是dev_kzmaloc(),最后一个细节是在为fbdev子系统分配屏幕缓冲指针时使用u pa(vmem)。然后它开始工作:-)-仔细阅读地图和你分享的段落,那里可能有线索。