[kernel]kobject & kset

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的关系

扫描二维码关注公众号,回复: 3369060 查看本文章

猜你喜欢

转载自www.cnblogs.com/mazh/p/9707810.html
今日推荐