学习Linux那些事儿之我是Sysfs笔记
sys文件系统的作用:用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。
sysfs的挂载过程:mount -t sysfs sysfs /sys,sysfs是个特殊文件系统,它没有实际存放文件的介质,断电就没有了。sysfs信息来源是
kobject层次结构,读一个sysfs文件,就是动态从kobject结构提取信息,生成文件。
Kobject:
(1)内核中用struct kobject表示,该结构体使设备在底层都具有统一的接口,kobject提供基本对象的管理。
(2)每个在内核中注册的kobject对象都对应于sysfs文件系统的一个目录。
(3)kobject是组成设备模型的基本结构,通过kobject将所有设备连接起来,形成一个树状结构,该结构就与/sys/对应。
kobject为一些大的数据结构和子系统提供基本的对象管理:
(1)对象引用计数
(2)维护对象链表(集合)
(3)对象上锁
(4)在用户空间表示
kobject的结构表示:
操作该结构体的接口:
(1)增减对象引用计数的,kobject_get()、kobject_put()。
(2)对kobject初始化,kobject_init()。
(3)设置kobject的名称,kobject_set_name()。
(4)释放kobject对象,kobject_release()。
(5)将kobject添加到linux设备层次,kobject_add()。
(6)kobject注册函数,kobject_register,先调用kobject_init(),在调用kobject_add。
成员kobj_type
(1)release方法用于释放kobject占用的资源。
(2)sysfs_ops指向sysfs操作表和一个sysfs文件系统默认属性列表。操作表包括的函数store()和show(),
当用户读取属性时,show被调用,该函数将属性值存入buffer返回给用户态。store用于存储用户态传入的属性值。
成员attribute
它以文件的形式输出到sysfs的目录中,kobject对应的目录下面,文件名就是name。
kset的作用:建立上层(sub_system)和下层(kobject)的关联性,kobject利用它分别自己属于哪个类型,然后在/sys/下建立正确的目录位置。
(1)包含在kset中的所有kobject被组织成一个双向循环链表,list域正式改链表的头。
(2)ktype 指向一个kobj type结构,被该kset中的所有kobject共享,表示这些对象的类型。
(3)kobject,所有属于该kset的kobject对象的parent域都指向这个内嵌的对象。
(4)kset还依赖kobj维护的引用计数。该实际计数就是内嵌kobject对象的引用计数。
kset操作的相关函数:
(1)kset_init(),完成指定kset的初始化。
(2)kset_get和kset_put分别是增加和减少kset对象的引用计数。
(3)kset_add和kset_del分别实现指定kset对象加入设备层次和从其中删除。
(4)kset_register和kset_unregister分别完成kset的注册和注销。
subsystem
kset是管理kobject的集合,subsystem是管理kset的集合,它描述系统中某一类设备子系统,若block subsys表示所有的块设备
,对应于sysfs文件系统的block目录。
该结构体的描述
(1)subsystem与kset的区别是多了一个信号量,每个kset属于某个subsystem。
(2)通过设置kset结构的subsys域指向指定的subsystem,可以将一个kset加入该subsystem。