Linux驱动模型可以从底层和上层两个层次来探究: 设备底层模型 和 设备模型的上层容器
Linux驱动模型和sysfs文件系统紧密相连,在内核中注册的每个kobject对象对应sysfs文件系统中的一个目录。
sysfs的引入是为了方便调试,设备模型的开发者将设备结构树导出为一个文件系统,这就是sysfs文件系统,它可以帮助用户能以一个简单文件系统的方式来观察系统中各种设备的拓扑结构。sysfs代替了先前处于/proc下的设备相关文件;另外它为系统对象提供了一个很有效的视图。
1. Linux设备底层模型
kobject, ktype 和 kset
kobject代表设备驱动模型中一个基本对象,是一个顶级,抽象类,
用来嵌入某一个具体的设备结构体中
ktype是kobj_type类型的结构体, 记录了kobject对象的一些属性(对象公共属性,sysfs操作集,对象释放处理方法等)
kset是一个kobject集合,包含了一系列的kobject,同时它本身也是一个kobject
相关操作函数:
kobject 相关函数
kobject_init() // 初始化kobject结构
kobject_add() // 将kobject对象注册到系统
kobject_init_and_add() // 初始化kobject,并将其注册到系统
kobject_create()
kobject_create_and_add()
kobject_set_name() // 设置kobject的名字
kobject_del() // 从系统中删除kobject对象
kobject_get() // 将kobject对象的引用计数加1,同时返回该对象指针
kobject_put() // 将kobject对象的引用计数减1,如果引用计数降为0,则调用release方法释放该kobject对象
kset也有类型的函数
kset_init() //
kset_register() //
kset_unregister()
kset_create_and_add()
kobject_del() //
kset_get() //
kset_put()
关于详细的描述可以参考内核文档 Documentation/kobject.txt