为什么没有配置支持mmap?

时间:2016-09-16 12:05:23

标签: linux filesystems kernel mmap sysfs

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

  • PL可以在运行时更改。

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

  • 每个映射都会在configfs中获取一个可访问的条目。

我想允许进程对整个页面进行mmap,因此他们可以直接与PL进行通信。

但是configfs不支持mmap。

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

解决方案是将我的configfs树镜像到sysfs,
但这打败了使用configfs的全部理由......任何想法?

1 个答案:

答案 0 :(得分:2)

configfs不是sysfs的替代品。事实上,它可以被视为与sysfs相反。

sysfs通过文件系统接口提供内核对象的视图。它可以用来改变这些对象中的内容或对这些对象做出某些操作,但它并不适用于此。这里的主要观点是在sysfs中表示的每个对象都在内核中创建和销毁。内核控制着sysfs表示的生命周期,而sysfs只是这一切的窗口。

另一方面,

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

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

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