为什么configfs不支持mmap?
Why doesn't configfs support mmap?
我正在为嵌入式系统开发 linux 内核模块。
该系统包含可编程逻辑(PL),需要从用户空间进程访问。
PL 可以在运行时更改。
我的模块允许进程访问指定的硬件寄存器和页面。
这些映射在我的模块的 configfs 绑定中配置(在运行时)。
每个映射在 configfs 中都有一个条目,通过它可以访问。
我希望允许进程映射整个页面,以便它们能够直接与 PL 通信。
但是configfs不支持mmap。
- 有什么原因吗?
- Sysfs 支持 mmap,所以我看不出 configfs 不支持的原因。
一个解决方案是将我的 configfs 树镜像到 sysfs,
但这打败了使用 configfs 的全部原因...有什么想法吗?
configfs
不能替代 sysfs
。其实可以看成是sysfs
.
的反义词
sysfs
通过文件系统接口提供内核对象的视图。它可用于更改这些对象中的内容或引起对这些对象的某些操作,但它并非用于此目的。这里的要点是 sysfs
中表示的每个对象都是在内核中创建和销毁的。内核控制着 sysfs 表示的生命周期,而 sysfs 只是这一切的 window。
另一方面,configfs
提供了一种通过文件系统接口创建或更改内核对象的方法。这是一个根本的区别。 user-space 进程可以在 configfs
内创建目录。该操作将导致在内核中执行回调并创建相应的内核对象。目录中的文件将代表各种对象组件的状态。
我怀疑在这两种情况下,由于内核和用户 space 进程之间数据交换的性质,认为在 configfs
中没有必要支持 mmap。
没有看到您系统的 design/architecture 就很难对您的情况下定论。从您的描述看来,sysfs
可能是您满足预期目标所需要的。您需要访问的所有对象都是从内核创建、修改和销毁的。可以通过 sysfs
接口限制 settings/changes 到模块中现有的内核 structures/objects。再一次,您可能希望在模块中同时拥有 sysfs
和 configfs
接口,每个接口都有其特定用途。如果它能让事情变得更清晰,那也没什么不好的。
我正在为嵌入式系统开发 linux 内核模块。
该系统包含可编程逻辑(PL),需要从用户空间进程访问。
PL 可以在运行时更改。
我的模块允许进程访问指定的硬件寄存器和页面。
这些映射在我的模块的 configfs 绑定中配置(在运行时)。每个映射在 configfs 中都有一个条目,通过它可以访问。
我希望允许进程映射整个页面,以便它们能够直接与 PL 通信。
但是configfs不支持mmap。
- 有什么原因吗?
- Sysfs 支持 mmap,所以我看不出 configfs 不支持的原因。
一个解决方案是将我的 configfs 树镜像到 sysfs,
但这打败了使用 configfs 的全部原因...有什么想法吗?
configfs
不能替代 sysfs
。其实可以看成是sysfs
.
sysfs
通过文件系统接口提供内核对象的视图。它可用于更改这些对象中的内容或引起对这些对象的某些操作,但它并非用于此目的。这里的要点是 sysfs
中表示的每个对象都是在内核中创建和销毁的。内核控制着 sysfs 表示的生命周期,而 sysfs 只是这一切的 window。
configfs
提供了一种通过文件系统接口创建或更改内核对象的方法。这是一个根本的区别。 user-space 进程可以在 configfs
内创建目录。该操作将导致在内核中执行回调并创建相应的内核对象。目录中的文件将代表各种对象组件的状态。
我怀疑在这两种情况下,由于内核和用户 space 进程之间数据交换的性质,认为在 configfs
中没有必要支持 mmap。
没有看到您系统的 design/architecture 就很难对您的情况下定论。从您的描述看来,sysfs
可能是您满足预期目标所需要的。您需要访问的所有对象都是从内核创建、修改和销毁的。可以通过 sysfs
接口限制 settings/changes 到模块中现有的内核 structures/objects。再一次,您可能希望在模块中同时拥有 sysfs
和 configfs
接口,每个接口都有其特定用途。如果它能让事情变得更清晰,那也没什么不好的。