Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 来自用户空间的内核驱动程序和mmap_C_Linux_Linux Kernel - Fatal编程技术网

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)。然后它开始工作:-)

-仔细阅读地图和你分享的段落,那里可能有线索。