我正在为嵌入式系统开发一个linux内核模块 该系统包含可编程逻辑(PL),需要从用户空间进程访问。
PL可以在运行时更改。
我的模块允许进程访问指定的hw寄存器和页面 这些映射在我的模块的configfs绑定中配置(在运行时)。
每个映射都会在configfs中获取一个可访问的条目。
我想允许进程对整个页面进行mmap,因此他们可以直接与PL进行通信。
但是configfs不支持mmap。
解决方案是将我的configfs树镜像到sysfs,
但这打败了使用configfs的全部理由......任何想法?
答案 0 :(得分:2)
configfs
不是sysfs
的替代品。事实上,它可以被视为与sysfs
相反。
sysfs
通过文件系统接口提供内核对象的视图。它可以用来改变这些对象中的内容或对这些对象做出某些操作,但它并不适用于此。这里的主要观点是在sysfs
中表示的每个对象都在内核中创建和销毁。内核控制着sysfs表示的生命周期,而sysfs只是这一切的窗口。
configfs
提供了一种通过文件系统接口创建或更改内核对象的方法。这是一个根本的区别。用户空间进程可以在configfs
内创建目录。该操作将导致内核中的回调执行以及相应内核对象的创建。目录中的文件将表示各种对象组件的状态。
我怀疑由于在这两种情况下内核与用户空间进程之间的数据交换性质,认为没有必要在configfs
中支持mmap。
如果没有看到系统的设计/架构,很难在您的案例中说明确定的内容。从您的描述中可以看出sysfs
可能是您满足预期目标所需要的。您需要访问的所有对象都是从内核创建,修改和销毁的。可以通过sysfs
接口对模块中现有内核结构/对象进行有限的设置/更改。然后,您可能希望在模块中同时拥有sysfs
和configfs
接口,每个接口都有其特定用途。如果能让事情变得更清晰,那就没什么不好了。