1. 程式人生 > >[kernel]kobject & kset

[kernel]kobject & kset

對象 file truct type 文件的操作 nta 沒有 amp 溝通

1.什麽是kobject

kobject是內核中的通用對象模型,用來為內核中各部分的對象管理提供統一視圖

kobject一般都不會單獨使用,這樣是沒有意義的,它總是內嵌到其他結構體中
由於kobject是系統統一管理的,因此先找到kobject對象進而跟蹤到其代表的具體對象是很常見的做法。當kobject內嵌在其他的結構體內時,可以通過container_of()這個宏來知道找到對應的結構體

2.創建kobject

使用kobject_create_and_add來創建kobject,這個接口完成kobject_create跟kobject_add的工作

struct kobject *kobject_create(void)

struct kobject {
const char name; / kobject對象的名字,對應sysfs中的目錄名 /
struct list_head entry; /
在kset中的鏈表節點 /
struct kobject
parent; /* 用於構建sysfs中kobjects的層次結構,指向父目錄 /
struct kset
kset; /* 所屬kset /
struct kobj_type
ktype; /* 特定對象類型相關,用於跟蹤object及其屬性 /
struct sysfs_dirent
sd; /* 指向該目錄的dentry私有數據 /
struct kref kref; /
kobject的引用計數,初始值為1 /
unsigned int state_initialized:1; /

kobject是否初始化,由kobject_init()設置 /
unsigned int state_in_sysfs:1; /
是否已添加到sysfs層次結構中 /
unsigned int state_add_uevent_sent:1;
unsigned int state_remove_uevent_sent:1;
unsigned int uevent_suppress:1; /
是否忽略uevent事件 */
};

int kobject_add(struct kobject kobj, struct kobject parent,const char *fmt, ...)
這個函數負責將kobject 添加到系統當中,parent為NULL的時候會添加到sys目錄下

3.kobject的屬性

創建kobject相當於在/sys目錄下建立了一個目錄,我們可以透過一些接口為這些目錄設定一些屬性文件,上層可以透過對這些屬性文件的操作來與內核溝通,完成一些系統層面的工作
例如,上層可以透過/sys/power/下的某個屬性文件通知系統待機執行一些特定的流程等
屬性文件的創建方法:
通過sysfs_create_file設定kobject下的一個屬性
通過sysfs_create_group設定kobject下的一組屬性

4.kobject與kset的關系

[kernel]kobject & kset