1 Linux设备模型
Linux 2.5的内核引入了一种新的设备模型,目的是对计算机上的所有设备进行统一的管理。
它包含以下基础结构:
类型 |
说明 |
设备Devices
|
设备是此模型中最基本的类型,以设备本身的连接按层次组织 |
设备驱动Device Drivers
|
在一个系统中安装多个相同设备,只需要一份驱动程序的支持 |
总线类型Bus Types
|
在整个总线级别对此总线上连接的所有设备进行管理 |
设备类别Device Classes
|
这是按照功能进行分类组织的设备层次树;如 USB 接口和 PS/2 接口的鼠标都是输入设备,都会出现在 /sys/class/input/ 下 |
Linux通过以上模型把实现设备的统一管理,使驱动和设备自动的匹配。
2 sysfs文件系统
sysfs是一种基于内存的虚拟文件系统,它提供目录、属性文件、链接文件等,让用户空间能便捷地访问kernel的设备信息。
在内部实现上,sysfs以kobject数据结构为最小的粒度,进而封装成kset、subsystem、bus_type、class等模型来组织设备间的拓扑关系。
2.1sysfs顶层目录
/sys的顶层目录结构如下:
/sys 下的子目录 |
所包含的内容 |
/sys/devices |
这是内核对系统中所有设备的分层次表达模型,也是 /sys 文件系统管理设备的最重要的目录结构,下文会对它的内部结构作进一步分析; |
/sys/dev |
这个目录下维护一个按字符设备和块设备的主次号码(major:minor)链接到真实的设备(/sys/devices下)的符号链接文件,它是在内核 2.6.26 首次引入; |
/sys/bus |
这是内核设备按总线类型分层放置的目录结构, devices 中的所有设备都是连接于某种总线之下,在这里的每一种具体总线之下可以找到每一个具体设备的符号链接,它也是构成 Linux 统一设备模型的一部分; |
/sys/class |
这是按照设备功能分类的设备模型,如系统所有输入设备都会出现在 /sys/class/input 之下,而不论它们是以何种总线连接到系统。它也是构成 Linux 统一设备模型的一部分; |
/sys/block |
这里是系统中当前所有的块设备所在,按照功能来说放置在 /sys/class 之下会更合适,但只是由于历史遗留因素而一直存在于 /sys/block, 但从 2.6.22 开始就已标记为过时,只有在打开了 CONFIG_SYSFS_DEPRECATED 配置下编译才会有这个目录的存在,并且在 2.6.26 内核中已正式移到 /sys/class |