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;   //引用計數
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章