码迷,mamicode.com
首页 > 其他好文 > 详细

[kernel]kobject & kset

时间:2018-09-27 01:58:25      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:oid   null   特定   跟踪   内核   文件的   group   意义   接口   

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

标签:oid   null   特定   跟踪   内核   文件的   group   意义   接口   

原文地址:https://www.cnblogs.com/mazh/p/9707810.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!