kobject kset klist


struct kobject {
const char *name;  //名字
struct list_headentry; // 用来挂在 kset-》list上的
struct kobject*parent; // 父结点 可以是 kobj, kset-》obj ,空
struct kset *kset; //所属kset
struct kobj_type*ktype; // 所属类型
struct sysfs_dirent*sd; //sysfs 的目录
struct kref kref; //  引用计数
unsigned int state_initialized:1;  //初始化后置1
unsigned int state_in_sysfs:1;  // 创建目录后置1
unsigned int state_add_uevent_sent:1;  // kobj_add后置1
unsigned int state_remove_uevent_sent:1; //kobj——remove后置1
unsigned int uevent_suppress:1;  //用来控制丢弃uevnet位
};


struct kobj_type {
void (*release)(struct kobject *kobj);  //释放函数
const struct sysfs_ops *sysfs_ops;  //sysfs控制函数
struct attribute **default_attrs;  //默认属性
const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj); 
const void *(*namespace)(struct kobject *kobj);
};


struct kset {
struct list_head list; //用来挂kobj-》entry
spinlock_t list_lock;  //操作list的锁
struct kobject kobj;  //kset的根kobj节点,完全利用其内容
const struct kset_uevent_ops *uevent_ops;
};




struct klist {
spinlock_t k_lock;  //操作链表的锁
struct list_headk_list; //用来挂klist_node-》n_node
void (*get)(struct klist_node *);  //顶层的初始化
void (*put)(struct klist_node *);  //顶层的释放函数
} __attribute__ ((aligned (sizeof(void *))));



struct klist_node {
void *n_klist;//指向klist
struct list_headn_node;  //挂在klist-》k_list
struct kref n_ref;   //引用计数
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章