【问题标题】:Kernel driver and mmap from userspace来自用户空间的内核驱动程序和 mmap
【发布时间】:2016-02-29 12:58:02
【问题描述】:

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

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

我在这里忘记了什么吗?

【问题讨论】:

标签: c linux linux-kernel


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2014-09-10
    • 2011-12-18
    • 2020-12-04
    • 1970-01-01
    相关资源
    最近更新 更多