看了几天的Linux驱动模型,有必要做个总结了。否者还是会出现后面又忘了的情况。跟设备模型密切相关的是sysfs文件系统,二者大概是存在一一对应的关系。后面看了sysfs再做补充,其实一些人的博客倒是看过,就是还没有深入的理解。
先说三个结构体kobject,kset,ktype.这里先做一个形象的比喻,如果把内核比喻为世界,那么kobject就是基本的组成单元-人。kset相当于把人组成为不同的国家,每个国家的人享有不同权利。ktype一些基本的属性,比如人类的语言。不同国家的人却可以说相同的语言。内核中ktype不多,kset却相当丰富。这一点也比较相似。
kobject结构体是最基本的结构体,这里类似于OO中的基类。kobject提供了一些基本的数据,比如引用次数等.
59 struct kobject {
60 const char *name; //名字
61 struct list_head entry; //内嵌链表数据,用来把kobject数据串起来
62 struct kobject *parent; //层次结构中的父节点,一般指向所属kset的中内嵌的kobject
63 struct kset *kset; //指向所属kset
64 struct kobj_type *ktype; //指向ktype,ktype提供kobject的属性,释放等操作。
65 struct sysfs_dirent *sd; //用于sysfs
66 struct kref kref; //应用次数
67 unsigned int state_initialized:1;
68 unsigned int state_in_sysfs:1;
69 unsigned int state_add_uevent_sent:1;
70 unsigned int state_remove_uevent_sent:1;
71 unsigned int uevent_suppress:1;
72 };
107 struct kobj_type {
108 void (*release)(struct kobject *kobj); //提供kobject结构的析构函数
109 const struct sysfs_ops *sysfs_ops;//对应于sysfs操作
110 struct attribute **default_attrs;//默认属性指针
111 const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);//namespce相关,现在未懂
112 const void *(*namespace)(struct kobject *kobj);//namespce相关,现在未懂
113 };
//用来表示一个kobject集合的,比如都是输入设备等
192 struct kset {
193 struct list_head list; // 指向kobject串
194 spinlock_t list_lock; //kset保护自旋锁
195 struct kobject kobj; //本身也是kobject,可以在sysfs中显示
196 const struct kset_uevent_ops *uevent_ops;//uevent相关操作函数,如果kset中的kobject发生事件,调用之
197 };
先说三个结构体kobject,kset,ktype.这里先做一个形象的比喻,如果把内核比喻为世界,那么kobject就是基本的组成单元-人。kset相当于把人组成为不同的国家,每个国家的人享有不同权利。ktype一些基本的属性,比如人类的语言。不同国家的人却可以说相同的语言。内核中ktype不多,kset却相当丰富。这一点也比较相似。
kobject结构体是最基本的结构体,这里类似于OO中的基类。kobject提供了一些基本的数据,比如引用次数等.
59 struct kobject {
60 const char *name; //名字
61 struct list_head entry; //内嵌链表数据,用来把kobject数据串起来
62 struct kobject *parent; //层次结构中的父节点,一般指向所属kset的中内嵌的kobject
63 struct kset *kset; //指向所属kset
64 struct kobj_type *ktype; //指向ktype,ktype提供kobject的属性,释放等操作。
65 struct sysfs_dirent *sd; //用于sysfs
66 struct kref kref; //应用次数
67 unsigned int state_initialized:1;
68 unsigned int state_in_sysfs:1;
69 unsigned int state_add_uevent_sent:1;
70 unsigned int state_remove_uevent_sent:1;
71 unsigned int uevent_suppress:1;
72 };
107 struct kobj_type {
108 void (*release)(struct kobject *kobj); //提供kobject结构的析构函数
109 const struct sysfs_ops *sysfs_ops;//对应于sysfs操作
110 struct attribute **default_attrs;//默认属性指针
111 const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);//namespce相关,现在未懂
112 const void *(*namespace)(struct kobject *kobj);//namespce相关,现在未懂
113 };
//用来表示一个kobject集合的,比如都是输入设备等
192 struct kset {
193 struct list_head list; // 指向kobject串
194 spinlock_t list_lock; //kset保护自旋锁
195 struct kobject kobj; //本身也是kobject,可以在sysfs中显示
196 const struct kset_uevent_ops *uevent_ops;//uevent相关操作函数,如果kset中的kobject发生事件,调用之
197 };