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