虽然设备模型的初衷是为了方便电源管理而提供出的一种设备拓扑结构,但是,为了方便调试,设备模型的开发者决定将设备结构树导出为一个文件系统,这就是sysfs文件系统,它可以帮助用户以一个简单文件系统的方式来观察系统中各种设备的拓扑结构。这个举措很快被证明是非常明智的,首先sysfs代替了先前处于/proc下的设备相关文件;另外它为系统对象提供了一个很有效的视图。实际上,sysfs起初被称为driverfs。最终sysfs使得我们认识到一个全新的对象模型非常有利于系统。今天所有2.6内核的系统都拥有sysfs文件系统,而且几乎都毫无例外的将其挂载。
图一是挂载于/sys目录下的sysfs文件系统的局部视图。
> mount -t sysfs sysfs /sys
/sys
|—block/
| |–fd0
| |–had
| |–dev
| |–device->../../devices/pci0000:00/0000:00:1f.1/ide0/0.0
| …
|–bus/
|–class/
|–devices/
|–firmware/
|–power/
|–module/
sysfs的根目录下包含了七个目录:block,bus,class,devices,firmware,module和power。
(1)block目录下的每个子目录都对应着系统中的一个块设备。反过来,每个目录下又都包含了该块设备的所有分区。
(2)bus目录提供了一个系统总线视图。
(3)class目录包含了以高层功能逻辑组织起来的系统设备视图。
(4)devices目录是系统中设备拓扑结构视图,它直接映射出了内核中设备结构体的组织层次。
(5)firmware目录包含了一些诸如ACPI,EDD,EFI等低层子系统的特殊树。
(6)power目录包含了系统范围的电源管理数据。
(7)module目录包含了内核模块。模块是一种向Linux内核添加设备驱动程序、文件系统及其他组件的有效方法。
其中最重要的目录是devices,该目录将设备模型导出到用户空间。目录结构就是系统中实际的设备拓扑。其它目录中的很多数据都是将devices目录下的数据加以转换加工而得。比如,/sys/class/net/目录是以注册网络接口这一高层概念来组织设备关系的,在这个目中可能会有目录eth0,它里面包含的devices文件其实就是一个指回到devices下实际设备目录的符号连接。
随便看看任何你可访问到的Linux系统,这种系统设备视图相当准确和漂亮,而且可以看到class中的高层概念与devices中的低层物理设备,以及bus中的实际驱动程序之间互相联络是非常广泛的。
版权声明
本文仅代表作者观点,不代表本站立场。 本文系作者授权发表,未经许可,不得转载。