为什么configfs不支持mmap?

3
我正在为嵌入式系统开发Linux内核模块。该系统包含可编程逻辑(PL),需要从用户空间进程访问。
  • PL可以在运行时更改。

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

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

我想允许进程mmap整个页面,以便能够直接与PL通信。

但是configfs不支持mmap。

  • 有没有什么原因呢?
  • Sysfs支持mmap,所以我看不出configfs为什么不支持。

一种解决方案是将我的configfs树镜像到sysfs中,但这违背了使用configfs的初衷...有什么想法吗?

1个回答

3

configfs 不是 sysfs 的替代品。实际上,它可以被看作是 sysfs 的相反面。

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

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

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

在没有看到您的系统设计/架构的情况下,很难说出确切的建议。从您的描述来看,sysfs 可能是满足您期望目标的所需工具。您需要访问的所有对象都是从内核中创建、修改和销毁的。在您的模块中,可以通过 sysfs 接口对现有内核结构/对象进行有限的设置/更改。然而,如果每个工具都有其特定的用途,那么您很可能希望在您的模块中同时拥有 sysfsconfigfs 接口。如果这样做能使事情变得更加清晰明了,则没有什么不好的。


我曾认为同时使用接口不是一个好的编程风格。但是通过configfs进行配置以及通过sysfs进行所有访问相关的操作非常吸引人。谢谢。 - drechsler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接