Linux 2.6内核的一个重要特色是提供了统一的内核设备模型。Linux 2.6内核引入的新的设备管理机制的最高层抽象为kobject,通过这个数据结构使所有设备在底层都具有统一的接口。kobject结构主要提供三方面的功能:引用计数、sysfs表示以及热插拔等事件支持。kobject与sysfs文件系统紧密关联,每个在内核中注册的kobject对象都对应于sysfs文件系统中的一个目录。kobject结构定义如下:

  1. struct kobject {
  2. const char      *name; //名称
  3. struct list_head    entry; //同类kobjects的链表
  4. struct kobject      *parent; // 父对象
  5. struct kset     *kset; // 所属的集合
  6. struct kobj_type    *ktype; // 对象的类型
  7. struct sysfs_dirent *sd; // 在sysfs 中的目录项
  8. struct kref     kref; // 计数
  9. unsigned int state_initialized:1;
  10. unsigned int state_in_sysfs:1;
  11. unsigned int state_add_uevent_sent:1;
  12. unsigned int state_remove_uevent_sent:1;
  13. unsigned int uevent_suppress:1;
  14. };

kobj_type表示对象的类型:

  1. struct attribute {
  2. const char  *name;
  3. struct module   *owner;
  4. mode_t  mode;
  5. };
  6. struct kobj_type {
  7. void (*release)(struct kobject *kobj);
  8. struct sysfs_ops *sysfs_ops;//sysfs操作接口
  9. struct attribute **default_attrs;//属性
  10. };

kobject对象的接口函数如下:

  1. void kobject_init(struct kobject *kobj, struct kobj_type *ktype);
  2. int kobject_add(struct kobject *kobj,struct kobject *parent,const char *fmt, ...);
  3. void kobject_del(struct kobject *);
  4. struct kobject * kobject_create(void);
  5. struct kobject *kobject_get(struct kobject *kobj);
  6. void kobject_put(struct kobject * kobj);//减少使用计数

kobject通常通过kset组织成层次化的结构,kset是具有相同类型的kobject的集合。所有属于同一个ksets的对象(kobject)的parent都指向该ksets的kobj成员。

  1. struct kset {
  2. struct list_head list; //同一kset的链表
  3. spinlock_t list_lock;//锁
  4. struct kobject kobj; //自身的kobject
  5. struct kset_uevent_ops *uevent_ops;// uevent操作,如热插拔事件
  6. };

ksets对象的接口函数如下:

  1. void kset_init(struct kset * k);
  2. struct kset * kset_create_and_add(const char *name,struct kset_uevent_ops *u,
  3. struct kobject *parent_kobj);
  4. int kset_register(struct kset *kset);
  5. void kset_unregister(struct kset *kset);

(Linux 2.6设备管理机制)kobject和kset相关推荐

  1. Linux 设备模型之 (kobject、kset 和 Subsystem)(二)

    1.kobject 结构 在Linux内核里,kobject是组成Linux设备模型的基础,一个kobject对应sysfs里的一个目录.从面向对象的角度来说,kobject可以看作是所有设备对象的基 ...

  2. Linux设备管理: kobject、kset、ktype分析

    Linux 内核大量使用面向对象的设计思想,通过追踪源码,我们甚至可以使用面向对象语言常用的 UML 类图来分析 Linux 设备管理的"类"之间的关系.这里以 4.14 内核为例 ...

  3. Linux设备模型剖析系列一(基本概念、kobject、kset、kobj_type)

    CSDN链接: Linux设备模型剖析系列一(基本概念.kobject.kset.kobj_type) Linux设备模型剖析系列之二(uevent.sysfs) Linux设备模型剖析系列之三(de ...

  4. 嵌入式Linux驱动笔记(十六)------设备驱动模型(kobject、kset、ktype)

    ###你好!这里是风筝的博客, ###欢迎和我一起交流. 前几天去面试,被问到Linux设备驱动模型这个问题,没答好,回来后恶补知识,找了些资料,希望下次能答出个满意答案. Linux早期时候,一个驱 ...

  5. Linux驱动之Kobject、Kset (二)uevent mdev ktype type(转载)

    LDD3中说,Kobject的作用为: 1.sysfs 表述:在 sysfs 中出现的每个对象都对应一个 kobject, 它和内核交互来创建它的可见表述. 2.热插拔事件处理 :kobject 子系 ...

  6. Linux设备驱动之Kobject、Kset

    LDD3中说,Kobject的作用为: 1.sysfs 表述:在 sysfs 中出现的每个对象都对应一个 kobject, 它和内核交互来创建它的可见表述. 2.热插拔事件处理 :kobject 子系 ...

  7. linux kset subsystem 3.10内核,Kobject、Kset 和 Subsystem

    2014年5月12日Kobject .Kset 和 Subsy stem - 海王 - 博客园http://www.doczj.com/doc/93b5b6113b3567ec112d8a49.htm ...

  8. Linux设备驱动之Kobject、Kset(转载)

    纠结又纠结,虽然看了一些关于kobject 和 kset 的书与文章,但是对于这两个东西,还是不太明白,又分析了一遍2.6.32.2内核的代码,结合前人的努力,终于有了一点眉目.总结一下,给自己做个笔 ...

  9. Linux设备驱动模型二 kobject

    Linux设备驱动模型二 kobject 1 kobject 1.1 kobject数据结构 kobject是sysfs文件系统的基础数据结构,它定义在include/linux/kobjec.h中 ...

最新文章

  1. http://forensics.idealtest.org CASIA图像篡改数据库
  2. 白话Elasticsearch47-深入聚合数据分析之Cardinality Aggs-cardinality算法之优化内存开销以及HLL算法
  3. Java中UDP协议的基本原理和简单用法
  4. 利用MATLAB进行系统时域分析,实验二 利用matlab进行系统的时域分析
  5. 动态调用object php,PHP动态调用,大家都来谈吧
  6. uvc摄像头代码解析1
  7. 台达伺服驱动器说明书_干货:伺服调机实例讲解
  8. 银行家算法 计算机操作系统,计算机操作系统 银行家算法.doc
  9. alwayson高可用组_了解AlwaysOn可用性组上的备份-第2部分
  10. UITextView的使用详解
  11. linux  指令 备注
  12. NGINX 结合 lua 动态修改upstream
  13. 2021年安全员-B证新版试题及安全员-B证试题及解析
  14. 屏幕准星工具软件_非常简单好用
  15. 这些才是Win10真正好用之处:瞬对Win7无爱
  16. 像冯满天老师一样热爱一样东西
  17. 如何做好性能压测:压测环境的设计和搭建
  18. 金贵子为什么能把托育做成功—专访济南唐冶校区张楠园长
  19. HBase--JavaAPI的操作,创建表修改表,增删改查数据
  20. 在Linux服务器上如何开启安全的SNMP代理

热门文章

  1. boost::math::bernoulli_b2n用法的测试程序
  2. boost::fusion::single_view用法的测试程序
  3. boost::function_types::is_member_object_pointer的用法测试程序
  4. GDCM:gdcm::TagToType的测试程序
  5. 宏BOOST_TEST_TRAIT_TRUE的用法实例
  6. boost::container模块实现字符串视图兼容性
  7. DCMTK:DcmOtherLong类的测试程序
  8. VTK:小部件之BorderWidget
  9. OpenCV创建校准图案calibration pattern
  10. Qt Creator使用Clang代码模型解析C ++文件