5.1.1. sysfs 文件系统简介

5.1.1.1. sysfs简介

sysfs是一个基于ramfs的文件系统,用来导出内核对象的数据、属性到用户空间,以文件目录结构的形式为用户空间提供对这些数据、属性的访问支持。

从驱动开发的角度,sysfs为用户提供了除了设备文件/dev和/proc之外的另一种通过用户空间访问内核数据的方式。使用sysfs编译内核的时候需要定义 CONFIG_SYSFS ,可以 通过 mount -t sysfs sysfs /sys 命令来挂载sysfs到/sys目录

5.1.1.2. sysfs目录结构

目录

描述

/sys/block

块设备的存放目录,这是一个过时的接口,现在所有设备都存放在/sys/devices同时在/sys/bus或/sys/class中存放符号连接

/sys/bus

包含了系统中的所有总线,每一种总线通常还有两个子目录device和driver

/sys/class

按照设备功能对系统设备进行分类的目录,例如输入设备都会在/sys/class/input中,/sys/class中都是符号连接,这样可以保证所有设备在系统中只有一个实例

/sys/dev

按照设备号对字符设备和块设备进行分类放在这个目录,同样使用符号链接到/sys/devices/中的相应文件

/sys/devices

所有设备文件的实例都在此目录下

/sys/fs

按照设计是用于描述系统中的所有文件系统

/sys/kernel

这里是n内核所有可调整参数的位置,但仍有一部分可调整参数位于/proc/sys/kernel中

/sys/module

这里有系统中的所有模块的信息,包括编译到内核中的以及编译为外部模块的(ko)

/sys/power

这里是系统中的电源选项,如可以写入控制命令使系统关机或重启

5.1.1.3. sysfs中的要素关系

sysfs提供一种机制,使得可以显式的描述内核对象,对象属性以及对象间的关系。sysfs有两组接口,一组针对内核,用于将设备映射到文件系统中,另一组针对用户程序,用于读取或者操作这些设备。

sysfs要素以及在用户空间的表现

../../_images/sysfs_element.png

sysfs在内核中要素

用户空间显示

内核对象(kobject)

目录

对象属性(attribute)

文件

对象关系(relationship)

链接

真正的设备信息放在devices目录下,bus下对应驱动和设备,class下有不同的分类

kobject和kset使linux设备驱动模型中的底层数据结构,kset结构体中包含了kobject结构体和链表头,所有属于这个kset的kobject都连接到链表头

../../_images/sysfs_datastruct.png