[kernel]kobject & kset
Posted mazh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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的关系
以上是关于[kernel]kobject & kset的主要内容,如果未能解决你的问题,请参考以下文章