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