linux驱动是一个整体的设备模型,这个模型是以kobject和kset作为基石的,因此搞懂kset和kobject的内部运作关系才能很好的理解统一设备模型.
首先linux对设备的抽象就是将设备描述为一个文件节点,因为设备有属性,比如说亮度、颜色等。因此kobject也就有属性.有了属性还要有统一的读写接口,写入的属性值通过内部再真正写到设备里面去.因此可以将一个kobject看成一个文件夹,里面有许多文件,一个文件描述一个属性.
而kset就可以看成是一个更大的文件夹,可以理解为类别,比如将所有驱动看成一个文件夹,这个文件夹是一个kset,然后这个文件夹下面有许多具体的驱动,这些驱动看成kobject.
先上图再看代码
struct kobject {
const char *name; //名称,文件名称
struct list_head entry; //同一级kobject链接结点
struct kobject *parent; //指向父级的kobject
struct kset *kset; //指向父级kset
struct kobj_type *ktype; //属性
struct sysfs_dirent *sd;
struct kref kref; //引用计数
unsigned int state_initialized:1; //标志位
unsigned int state_in_sysfs:1;
unsigned int state_add_uevent_sent:1;
unsigned int state_remo