如何在Linux内核中选择“sys”和“proc”文件?

7
据我所知,在Linux文件系统中,为了在用户空间和内核空间之间进行信息交流,使用了两种虚拟文件系统。
1) Proc文件系统:用于进程信息的动态获取和内核参数的动态配置。 http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html 2) Sysfs文件系统:主要用于管理和访问驱动程序和设备的状态信息,以及通过目录和属性文件提供与内核对象的接口。 https://en.wikipedia.org/wiki/Sysfs 在Linux内核代码中,一些子系统使用proc文件来执行这样的用户空间 - 内核空间通信,而某些系统则使用sysfs文件处理同样的问题。
因此,如果我要编写新的Linux内核模块或驱动程序,我应该如何选择虚拟文件?何时应使用sysfs,何时应使用proc文件?
请告诉我是否有任何误解。

相关问题:http://stackoverflow.com/questions/33873221/which-filesystem-to-use-to-expose-readings-limits-for-temperature-sensor。此外,我发现了这篇文章(http://people.ee.ethz.ch/~arkeller/linux/multi/kernel_user_space_howto-2.html)。虽然它描述了一些非进程相关的信息,但是放置在/proc下,它说:“请注意,尽管procfs被广泛使用,但它已被弃用,只应用于导出与进程本身相关的信息。”。 - Tsyvarev
1
procfs相反,如果您打算传输大缓冲区,则sysfs不适用,因为它仅接受最多页面大小的缓冲区大小。 - stdcall
2个回答

5
关于在procfs中添加/修改条目,我想到的唯一情况是当你与虚拟内存子系统进行交互时。这里指的是/proc/sys/vm/下的条目(如果你因某些原因修改了writebackovercomitswap等)。 如果你正在编写与已经通过procfs导出的内容无关的驱动程序或模块,则应使用sysfs

1

阅读了很多后,我有以下理解:

1)Proc文件是较早的方法之一。它在每次读写调用时分配PAGE大小的内存,但整个系统都存在缺陷(比如正在读取/写入任何设备的proc条目,而该设备已从系统中删除...在Proc系统中没有处理这种情况.. {从LDD中读取:})。因此,内核开发者社区建议使用更先进、更复杂的SYS文件系统。


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