koject、kset、ktype驱动基础结构体

随着技术的不断进步,系统的拓扑结构也越来越复杂,对智能电源管理、热插拔的支持要求也越来越高,2.4内核已经难以满足这些需求。为适应这种形势的需要,Linux 2.6内核提供了全新的内核设备模型。

1.0  kobject  

          这是一个结构体,所有驱动结构但必一个kobject ,如struct device struct device_driver  struct bus_type

函数的作用,是对结构体的填冲与操作,linux内核有面向对象的思想,所以理解了结构体内的内容,就明白函数的作用,所以首要任务是理解结构体。

 //include/linux/kobject.h

 63 struct kobject {  
 64     const char          *name;//1
 65     struct list_head    entry;//2
 66     struct kobject      *parent;//3
 67     struct kset         *kset;//4
 68     struct kobj_type    *ktype;//5
 69     struct kernfs_node  *sd; /* sysfs directory entry *///6
 70     struct kref         kref;//7   计算引用,每次调用必加1,
 71 #ifdef CONFIG_DEBUG_KOBJECT_RELEASE
 72     struct delayed_work release;
 73 #endif
 74     unsigned int state_initialized:1;
 75     unsigned int state_in_sysfs:1;
 76     unsigned int state_add_uevent_sent:1;
 77     unsigned int state_remove_uevent_sent:1;
 78     unsigned int uevent_suppress:1;
 79 };

 struct kobject
--64-->name表示kobject对象的名字,对应sysfs下的一个目录。
--65-->entry是kobject中插入的head_list结构,
--66-->parent是指向当前kobject父对象的指针,体现在sys结构中就是包含当前kobject对象的目录对象,
--67-->kset表示当前kobject对象所属的集合,
--68-->ktype表示当前kobject的类型。
--69-->sd用于表示VFS文件系统的目录项,是设备与文件之间的桥梁,sysfs中的符号链接就是通过kernfs_node内的联合体实现的。
--70-->kref是对kobject的引用计数,当引用计数为0时,就回调之前注册的release方法释放该对象。
--74-->state_initialized:1初始化标志位,在对象初始化时被置位,表示对象是否已经被初始化。
--75-->state_in_sysfs:1表示kobject对象在sysfs中的状态,在对应目录中被创建则置1,否则为0。
--76-->state_add_uevent_sent:1是添加设备的uevent事件是否发送标志,添加设备时会向用户空间发送uevent事件,请求新增设备。
--77-->state_remove_uevent_sent:1是删除设备的uevent事件是否发送标志,删除设备时会向用户空间发送uevent事件,请求卸载设备
 

猜你喜欢

转载自blog.csdn.net/h490516509/article/details/85195172