devices driver module

来源:互联网 发布:java 类 继承 编辑:程序博客网 时间:2024/04/26 22:16

koject结构里里面的细节部分

struct kobject{

const char* name;//char *name是包括这个kobject的设备或者其他数据结构的name

struct list_head entry;

strcut kobject *parent;

strcut kset*kset;

strcut kobject_type *ktype;

struct kref* kref;//是为kobject的引用计数

........................

}

ktype结构体里面的细节部分,它是描述kobject的类型,release在释放kobject的时候执行

struct kobj_type{

void(*release)(strcut kobject*kobj);

strcut sysfs_ops*sysfs_ops;

strcut attribute **default_attrs;//attribute是文件系统默认的属性链表

}

struct sysfs_ops{

*show(kobject,attribute);

*store(........);

}

struct attribute{

const char*name;

struct module*ower;

mode_t mode;

}

strcut kref{

atomic_t refcount;//用kobject_get和kobject_put操作,计数为0的话释放这个kobject的使用资源,release用来释放

}

----------------------------------------

struct kset{

struct subsystem *subsys;

struct kobj_type ktype;

struct list_head list;

strcut kobject kobj;

strcut kset_hotplug_ops*....

...

}

list是这个kset里面的kobject的链表!kobj_ktype是kobject里面的那个,被链表里面的所有的kobject共享,表示这些kobject都属于同一类型的!

这里的kobject就是位于kset链表里面的kobject的parent指针!kset的引用计数也是通过这个kobject里面的kref来计数的(kset_get(),kobjetc_put()函数)!

这个kobject还可以使kset被用来嵌入到具体的某个device或者更高层的kset,使它的kset也被嵌入(这里有点模糊,不知道当时怎么记的)!

struct subsystem{

kset;

rwsem;

}

subsystem的引用同上面的一样也是通过kset里面的kobject得到的

原创粉丝点击