【问题标题】:Why doesn't configfs support mmap?为什么 configfs 不支持 mmap?
【发布时间】:2017-01-24 15:48:26
【问题描述】:

我正在为嵌入式系统开发一个 linux 内核模块。
该系统包含可编程逻辑 (PL),需要从用户空间进程访问。

  • PL 可以在运行时更改。

  • 我的模块允许进程访问指定的硬件寄存器和页面。
    这些映射在我的模块的 configfs 绑定中配置(在运行时)。

  • 每个映射都会在 configfs 中获得一个条目,通过该条目可以访问它。

我希望允许进程映射整个页面,以便它们能够直接与 PL 通信。

但是 configfs 不支持 mmap。

  • 有什么原因吗?
  • Sysfs 支持 mmap,所以我看不出为什么 configfs 不应该有问题。

解决方案是将我的 configfs 树镜像到 sysfs,
但这破坏了使用 configfs 的全部理由......有什么想法吗?

【问题讨论】:

    标签: linux filesystems kernel mmap sysfs


    【解决方案1】:

    configfs 不能替代sysfs。其实可以看成是sysfs的对立面。

    sysfs 通过文件系统接口提供内核对象的视图。它可用于更改这些对象的内容或对这些对象执行某些操作,但它不是为此而设计的。这里的重点是sysfs 中表示的每个对象都是在内核中创建和销毁的。内核控制着 sysfs 表示的生命周期,而 sysfs 只是这一切的一个窗口。

    另一方面,configfs 提供了一种通过文件系统接口创建或更改内核对象的方法。这是一个根本的区别。用户空间进程可以在configfs 中创建目录。该操作将导致内核内的回调执行并创建相应的内核对象。目录中的文件将代表各种对象组件的状态。

    我怀疑在这两种情况下,由于内核和用户空间进程之间数据交换的性质,在configfs 中被认为没有必要支持 mmap。

    如果不了解您的系统的设计/架构,就您的情况很难说出明确的结论。从您的描述看来,sysfs 可能是您满足预期目标所需要的。您需要访问的所有对象都是从内核创建、修改和销毁的。可以通过sysfs 接口完成对模块中现有内核结构/对象的有限设置/更改。再说一次,您很可能希望在您的模块中同时拥有sysfsconfigfs 接口,每个接口都有其特定用途。如果它能让事情变得更干净、更清晰,那就没什么不好了。

    【讨论】:

    • 我认为同时使用这两个界面不是很好的风格。但是通过 configfs 进行配置以及通过 sysfs 进行所有与访问相关的事情是非常有吸引力的。谢谢。
    猜你喜欢
    • 2014-10-30
    • 2021-12-12
    • 1970-01-01
    • 2011-03-17
    • 2018-07-21
    • 2013-01-04
    • 2017-10-07
    • 2018-08-24
    • 2011-09-16
    相关资源
    最近更新 更多