码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 内核Ksets 对象

时间:2019-07-07 20:22:52      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:要求   parent   under   linux   一个   put   容器类   目录   成员   

很多情况, 一个 kset 看来象一个 kobj_type 结构的扩展; 一个 kset 是一个嵌入到相 同类型结构的 kobject 的集合. 但是, 虽然 struct kobj_type 关注的是一个对象的类 型, struct kset 被聚合和集合所关注. 这 2 个概念已被分开以至于一致类型的对象可 以出现在不同的集合中.

 

因此, 一个 kset 的主要功能是容纳; 它可被当作顶层的给 kobjects 的容器类. 实际上, 每个 kset 在内部容纳它自己的 kobject, 并且它可以, 在许多情况下, 如同一个 kobject 相同的方式被对待. 值得注意的是 ksets 一直在 sysfs 中出现; 一旦一个

kset 已被建立并且加入到系统, 会有一个 sysfs 目录给它. kobjects 没有必要在 sysfs 中出现, 但是每个是 kset 成员的 kobject 都出现在那里.

 

 

增加一个 kobject 到一个 kset 常常在一个对象创建时完成; 它是一个 2 步的过程. kobject 的 kset 成员必须 ???; 接着 kobject 应当被传递到:

 

int kobject_add(struct kobject *kobj);

 

如常, 程序员应当小心这个函数可能失败(在这个情况下它返回一个负错误码)并且相应地 反应. 有一个内核提供的方便函数:

 

extern int kobject_register(struct kobject *kobj); 这个函数仅仅是一个 kobject_init 和 kobject_add 的结合.

当一个 kobject 被传递给 kobject_add, 它的引用计数被递增. kset 中容纳的, 毕竟, 是一个对这个对象的引用. 某种意义上, kobject 可能要必须从 kset 中移出来清除这个 引用; 完成这个使用:

 

void kobject_del(struct kobject *kobj);

 

还有一个 kobject_unregister 函数, 是 kobject_del 和 kobject_put 的结合.

 

一个 kset 保持它的子女在一个标准的内核链表中. 在大部分情况下, 被包含的 kobjects 也有指向这个 kset 的指针( 或者, 严格地, 它的嵌入 kobject)在它们的 parent 的成员. 因此, 典型地, 一个 kset 和它的 kobjects 看来有些象你在图 一个简 单的 kset 层次中所见. 记住:

 所有的被包含的 kobjects 实际上被嵌入在一些其他类型中, 甚至可能其 他的 ksets.

  • 一个 kobject 的 parent 不要求是包含 kset( 尽管任何其他的组织可能是奇怪的 和稀少的).

Linux 内核Ksets 对象

标签:要求   parent   under   linux   一个   put   容器类   目录   成员   

原文地址:https://www.cnblogs.com/fanweisheng/p/11147455.html

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