linux Sysfs虚拟文件系统

Sysfs是内核导出的虚拟文件系统,包含有关设备和驱动程序的信息。

Sysfs是将特定设备的系统信息从内核导出到用户空间的常用方法。sysfs与内核的设备驱动程序模型绑定在一起。Sysfs关心设备信息,proc关心进程信息。

ls /sys/

sysfs通常包含九个顶级目录:

/sys/block:包含已知的块设备。

/sys/bus:包含所有注册的总线。

/sys/class:包含设备。

/sys/device:内核所知道的所有设备,由它们所连接的总线组织。

/sys/固件:包含一些设备的固件文件。

/sys/fs:包含用于控制文件系统的文件。

/sys/kernel:各种内核相关文件。

/sys/module:加载内核模块。每个模块由同名目录表示。

/sys/power:处理系统电源状态的各种文件

cd /sys/block/
ls

Linux统一设备模型

在Linux 2.5内核的开发过程中,设计了一套新的设备模型,目的是对计算机上的所有设备进行统一地表示和操作,包括设备及设备之间的关系。

在设备模型设计的过程中,通过观察发现,PCI和USB这两类总线能代表现今操作系统中的大多数设备类型。如:在一个典型的PC系统中,CPU直接控制PCI总线,USB总线以一个PCI设备的形式接入PCI总线,外部USB再接入到USB总线上。

sysfs则是这一设备模型开发过程中的一个副产品。为了将这些有层级结构的设备,以程序可见的方式表达出来,设计者想到了利用文件系统的目录树结构。

统一设备模型的基本结构

Devices:/sys/devices/*/*/.../

设备是此模型中最基本的类型,以设备自身的连接层次组织。

Device Drivers:/sys/bus/pci/drivers/*/

一个系统中安装多个相同设备,只需一份驱动程序。

Bus Types:/sys/bus/*/

在总线级别对总线上的所有设备进行管理。

Device Classes:/sys/class/*/

按照功能进行分类组织的设备层次树。如:USB接口和PS/2接口的鼠标都是输入设备,都出现在/sys/class/input/下。

模型数据结构

从内核实现时所使用的数据结构来看, Linux统一设备模型可分为树型和链表两种数据结构。

kobject:是Linux设备模型中的基础对象。它的作用是提供引用计数,并维持父子(parent)结构和平级(sibling)关系。

kset: 对同类型对象提供一个包装,在内核数据结构上是由内嵌一个kboject实现,因而它也是一个 kobject ,具有kobject的全部功能。

虚拟文件系统

sysfs和configfs存在于内存中的虚拟文件系统。sysfs的挂载点是/sys/或/sysfs/。configfs可以挂载在/config/或/sys/kernel/config/中。

当sysfs显示信息和内核对象时,configfs用于创建、修改和删除内核对象和数据。configfs是文件系统形式的内核管理器。