linux內(nèi)核一般對(duì)象管理
一.kobject管理
struct kobject {
const char *name;
struct list_head entry;
struct kobject *parent;
struct kset *kset;
struct kobj_type *ktype;
struct sysfs_dirent *sd;
struct kref kref;
unsigned int state_initialized:1;
unsigned int state_in_sysfs:1;
unsigned int state_add_uevent_sent:1;
unsigned int state_remove_uevent_sent:1;
unsigned int uevent_suppress:1;
};
Kobject不是通過指針與其他數(shù)據(jù)結(jié)構(gòu)連接起來的,而必須直接嵌入。這樣做通過管理kobject就可以達(dá)到包含kobject對(duì)象的管理。
例如:
Struct sample
{
Struct kobject kobj;
}
1.Name是對(duì)象的文本名稱??衫胹ysfs導(dǎo)出到用戶空間。Sysfs是一個(gè)虛擬文件系統(tǒng),可以將系統(tǒng)的各種屬性導(dǎo)出到用戶空間。Sd用于支持內(nèi)核對(duì)象與sysfs之間的關(guān)聯(lián)。
2.kref類型為struct kref,用于簡(jiǎn)化引用計(jì)數(shù)的管理。
3.entry是一個(gè)標(biāo)準(zhǔn)的鏈表元素,用于將若干kobject放在一個(gè)鏈表中
4.kset:將對(duì)象與其他對(duì)象放置在一個(gè)集合,
5.parent:是一個(gè)指向父對(duì)象的指針,可用于在kobject之間建立層次結(jié)構(gòu)。
6.ktype提供了包含kobject數(shù)據(jù)結(jié)構(gòu)的更多詳細(xì)信息。