Linux驱动模型的基本数据结构kobject介绍

看了几天的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 };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值