打印

Linus 设备底层模型 Kobject

[复制链接]
687|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zb0830|  楼主 | 2015-8-22 17:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Kobject 是 Linux 2.6 引入的新的设备管理机制,在内核中由 struct kobject
表示。通过这个数据结构使所有设备在底层都具有统一的接口,kobject 提供基
本的对象管理,是构成 Linux2.6 设备模型的核心结构,它与 sysfs 文件系统紧
密关联,每个在内核中注册的 kobject 对象都对应于 sysfs 文件系统中的一个目
录。Kobject 是组成设备模型的基本结构。类似于 C++中的基类,它嵌入于更大
的对象的对象中--所谓的容器--用来描述设备模型的组件。如 bus,devices,
drivers 都是典型的容器。这些容器就是通过 kobject 连接起来了,形成了一个
树状结构。这个树状结构就与/sys 向对应。
kobject 结构为一些大的数据结构和子系统提供了基本的对象管理,避免了类似
机能的重复实现。这些机能包括
- 对象引用计数.
- 维护对象链表(集合).
- 对象上锁.
- 在用户空间的表示.
Kobject 结构定义为:
struct kobject {
char * k name; 指向设备名称的指针
char name[KOBJ NAME LEN]; 设备名称
struct kref kref; 对象引用计数
struct list head entry; 挂接到所在 kset 中去的单元
struct kobject * parent; 指向父对象的指针
struct kset * kset; 所属 kset 的指针
struct kobj type * ktype; 指向其对象类型描述符的指针
struct dentry * dentry; sysfs 文件系统中与该对象对应的文件节点路径指针
};
其中的 kref 域表示该对象引用的计数,内核通过 kref 实现对象引用计数管理,
内核提供两个函数 kobject_get()、kobject_put()分别用于增加和减少引用计
数,当引用计数为 0 时,所有该对象使用的资源释放。Ktype 域是一个指向 kobj
type 结构的指针,表示该对象的类型。
相关函数
void kobject_init(struct kobject * kobj);kobject 初始化函数。
int kobject_set_name(struct kobject *kobj, const char *format, ...);
设置指定 kobject 的名称。
struct kobject *kobject_get(struct kobject *kobj);将 kobj 对象的引用
计数加 1,同时返回该对象的指针。
void kobject_put(struct kobject * kobj); 将 kobj 对象的引用计数减 1,
如果引用计数降为 0,则调用 kobject release()释放该 kobject 对象。 int kobject_add(struct kobject * kobj);将 kobj 对象加入 Linux 设备层次。挂接该 kobject 对象到 kset 的 list 链中,增加父目录各级 kobject 的引用计数,在其 parent 指向的目录下创建文件节点,并启动该类型内核对象的 hotplug 函数。 int kobject_register(struct kobject * kobj);kobject 注册函数。通过调用 kobject init()初始化 kobj,再调用 kobject_add()完成该内核对象的注册。 void kobject_del(struct kobject * kobj);从 Linux 设备层次(hierarchy)中删除 kobj 对象。 void kobject_unregister(struct kobject * kobj);kobject 注销函数。与kobject register()相反,它首先调用 kobject del 从设备层次中删除该对象,再调用 kobject put()减少该对象的引用计数,如果引用计数降为 0,则释放kobject 对象。

沙发
关小波522| | 2015-8-22 21:38 | 只看该作者
Linux很牛啊

使用特权

评论回复
板凳
peace555| | 2015-8-22 21:42 | 只看该作者
好高大上啊

使用特权

评论回复
地板
历史暴君| | 2015-8-22 22:52 | 只看该作者
学习了,kobject 不错

使用特权

评论回复
5
波越| | 2015-8-22 23:10 | 只看该作者
CY什么时候 能出M7的内核呢

使用特权

评论回复
6
给力芯片| | 2015-8-22 23:56 | 只看该作者
Linux好东西啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

879

帖子

2

粉丝