Sysfs 是Linux 2.6所提供的一种虚拟档案系统。这个档案系统不仅可以把装置(devices)和驱动程式(drivers)的资讯从内核输出到用户空间,也可以用来对装置和驱动程式做设定。

历史

Linux内核开发团队在Linux 2.5的开发过程中引入了‘Linux驱动程式模型’(Linux driver model),以解决2.4核心遭遇的以下问题:

  • 没有统一的机制表达驱动程式和装置的关系。
  • 不存在一般的热插拔(hotplug)机制。
  • procfs档案系统过度混乱,包含了许多不是行程(process)的资讯。

sysfs的目的是把一些原本在procfs中的,关于装置的部份,独立出来,以‘装置阶层架构’(device tree)的形式呈现。这个档案系统由Patrick Mochel所写,之后Maneesh Soni撰写“sysfs backing store path”,以降低在大型系统中对记忆体的需求量。

sysfs一开始ramfs为基础,也是一个只存在于记忆体中的档案系统。ramfs是在2.4核心处于稳定阶段时加入的。ramfs是一个优雅的实做,证明了要在当时仍很新的虚拟档案系统下写一个简单的档案系统是多么容易的一件事。由于ramfs的简洁以及使用了VFS,稍后的一些记忆体形式的档案系统都以它作为开发基础。

sysfs刚开始被命名成ddfs(Device Driver Filesystem),当初只是为了要对新的驱动程式模型除错而开发出来的。它在除错时,会把装置架构(device tree)的资讯输出到procfs档案系统中。但在Linus Torvalds的急切督促下,ddfs被转型成一个以ramfs为基础的档案系统。在新的驱动程式模型被整合进2.5.1核心时,ddfs被改名成driverfs,以更确切描述它的用途。

在2.5核心开发的次年,新的“驱动程式模型”和"driverfs"证明了对核心中的其他子系统也有用处。kobjects被开发出来,作为核心物件的中央管理机制,而此时driverfs也被改名成sysfs。

技术概观

每个被加入driver model tree内的对象,包括驱动程式、装置以及class装置,都会在sysfs档案系统中以一个目录呈现。对象的属性作为文件出现。符号链接代表对象间的关系。通常安装在/sys目录下:

mount -t sysfs sysfs /sys

外部链接