【问题标题】:Sharing memory from the linux kernel to user space in single user mode在单用户模式下从 linux 内核共享内存到用户空间
【发布时间】:2017-05-23 06:17:14
【问题描述】:

我有一个分配内存的内核模块,我想与用户进程共享该内存。在普通模式下,我们只能使用:mmap、/proc、shmem 等。但在单用户模式下,对于嵌入式设备,没有办法共享简单的指针吗?

【问题讨论】:

    标签: linux kernel driver


    【解决方案1】:

    “单用户模式”是用户空间定义的约定。它对内核没有意义;所有相同的规则都适用于“正常模式”。

    如果你想从用户空间访问内存——任何内存,你需要以某种方式将该内存映射到进程中。在特殊文件或设备节点上使用mmap() 是最自然的方法。

    【讨论】:

    • 我认为单用户模式应该禁用这些访问规则,因为没有人关心嵌入式设备中的多用户模式。
    • @PhilBouchard 不幸的是,只有你一个人这么想。内存保护在嵌入式设备中和在其他地方一样重要。
    • 如果你已经彻底测试了你的进程并且你“信任”它们,那么我认为应该有一种方法可以直接与内核对话并做任何你想做的事情(当然只适用于嵌入式设备)。
    【解决方案2】:

    伪 sysfs 文件系统 (/sys) 正是为此目的而设计的(将内核数据暴露给用户空间)。您也可以从用户空间写入这些数据结构。

    查看Greg Kroah-Hartman's Driver Tutorial

    阅读SysFS Documentation

    【讨论】:

    • 感谢您的信息,我可以看到 sysfs 就像 ramfs,这正是我正在寻找的!
    • @PhilBouchard 你确定吗? sysfs 与 ramfs 没有任何共同之处,除了它们都是文件系统。
    • 我的意思是 sysfs 可以像 ramfs 一样读取(直接访问内存)
    • @PhilBouchard sysfs 和 ramfs 都不提供“直接访问内存”。
    • @PhilBouchard 不是。访问 ramfs 中的文件必须通过系统调用(readwritemmap 等),就像它们在普通文件系统中一样。 ramfs 的唯一区别是文件永远不会写入持久存储。
    猜你喜欢
    • 2012-12-26
    • 1970-01-01
    • 2012-03-02
    • 2015-12-12
    • 2016-10-07
    • 1970-01-01
    • 2015-06-04
    • 2016-10-12
    • 2011-12-16
    相关资源
    最近更新 更多