一、概述
linux设备驱动模型主要由总线、设备和驱动构成,内核为了实现总线、设备和驱动之间的关系,定义了kobject和kset这样的底层基础数据结构。然后通过sysfs文件系统向用户空间展示发生在在内核空间中总线、设备和驱动之间的互联层次关系,并以文件系统接口的方式为用户空间程序提供访问内核对象属性信息的方法。
二、sysfs文件系统
sysfs是个基于RAM实现的文件系统,向用户空间展示发生在在内核空间中总线、设备和驱动之间的互联层次关系,并以文件系统接口的方式为用户空间程序提供访问内核对象属性信息的方法。
编译内核指定CONFIG_SYSFS选项,就会将sysfs文件系统包含到内核中,sysfs的标准挂载点式“/sys”目录,将sysfs文件系统挂载到用户进程的“/sys”目录的命令为“mount -t sysfs sysfs /sys”。
1. sysfs目录的创建
在内核中每注册一个新的内核对象kobject,就会在sysfs文件系统中生成一个新的目录,新目录的位置为于kobject父kobject目录下。sysfs文件系统目录的创建是通过sysfs_create_dir()函数完成的。
2. sysfs文件的创建
内核对象kobject的属性attributes在sysfs文件系统中体现为一个文件,用户空间成可以通过此文件与内核空间进行信息交互。
3. 互联层次的体现
内核对象kobject之间的层次关系体现在sysfs文件系统的目录层次。