linux设备模型 kobject/kset/kobjset概念
2014-03-05 10:27
441 查看
简单总结下三个设备模型的概念和作用。
设备模型是对设备进行有效管理的统一模型。是为了表示bus/device/驱动 之间的连接关系。反过来,他们是设备模型的上层建筑。设备模型的目的在于表示关系!kobject相当于总线/设备/驱动对象的基类,公共接口。
kobject是组成设备模型基本元素,相当于一个类,它在C语言中是一个结构体。怎么使用:把它嵌入到bus/device/驱动的结构体中,通过访问kobject就能访问具体的对象。因为C语言没有类,组合的概念,所以只能借助kobject(设备模型)嵌入到“对象结构”的方法,实现面向对象设计。
kset相当于kobject的容器,是管理相同类型kobject集合的,它的目的是创建树状集合,便于快速检索。它本身也包含一个指向自身的kobject。所有属于这个kset的子结构里面的parent域,都指向kset的object。可见,kset的object之所以存在,是为了和子对象的parent域关联。
kobj_type,相对于kset是为了创建集合,它的目标是管理相同类型的kobject,关注的是类型而不是集合。kset包含了kobject后,会在sysfs中创建一个目录,kset的每个object成员都会在里面展示kobject的“属性”,由于不同类型的kobject的“属性”不同,访问sysfs的接口函数也不同,sysfs访问函数表sysfs_ops有show()和store()两个操作函数,因此,需要kobj_type对不同kobject进行分类管理。
注意下面代码,kset本身也是一个kobject,所以有kobj成员变量
设备模型是对设备进行有效管理的统一模型。是为了表示bus/device/驱动 之间的连接关系。反过来,他们是设备模型的上层建筑。设备模型的目的在于表示关系!kobject相当于总线/设备/驱动对象的基类,公共接口。
kobject是组成设备模型基本元素,相当于一个类,它在C语言中是一个结构体。怎么使用:把它嵌入到bus/device/驱动的结构体中,通过访问kobject就能访问具体的对象。因为C语言没有类,组合的概念,所以只能借助kobject(设备模型)嵌入到“对象结构”的方法,实现面向对象设计。
kset相当于kobject的容器,是管理相同类型kobject集合的,它的目的是创建树状集合,便于快速检索。它本身也包含一个指向自身的kobject。所有属于这个kset的子结构里面的parent域,都指向kset的object。可见,kset的object之所以存在,是为了和子对象的parent域关联。
kobj_type,相对于kset是为了创建集合,它的目标是管理相同类型的kobject,关注的是类型而不是集合。kset包含了kobject后,会在sysfs中创建一个目录,kset的每个object成员都会在里面展示kobject的“属性”,由于不同类型的kobject的“属性”不同,访问sysfs的接口函数也不同,sysfs访问函数表sysfs_ops有show()和store()两个操作函数,因此,需要kobj_type对不同kobject进行分类管理。
struct attribute{ const char *name; struct module *owner; mode_t mode; }
struct kobject { const char *name; struct list_head entry; struct kobject *parent; struct kset *kset; struct kobj_type *ktype; struct sysfs_dirent *sd; struct kref kref; unsigned int state_initialized:1; unsigned int state_in_sysfs:1; unsigned int state_add_uevent_sent:1; unsigned int state_remove_uevent_sent:1; unsigned int uevent_suppress:1; };
注意下面代码,kset本身也是一个kobject,所以有kobj成员变量
struct kset { struct list_head list; spinlock_t list_lock; struct kobject kobj; const struct kset_uevent_ops *uevent_ops; };
struct kobj_type { void (*release)(struct kobject *kobj); const struct sysfs_ops *sysfs_ops; struct attribute **default_attrs; };
相关文章推荐
- linux设备模型之kobject、kset和kobj_type
- Linux kernel驱动相关抽象概念及其实现 之“linux设备模型kobject,kset,ktype”
- linux设备模型之Kobject与Kset
- Linux设备模型第二篇之kobject与kset之间的关系
- Linux 设备模型之 (kobject、kset 和 Subsystem)(二)
- linux总线设备模型-----kobject&kset
- 关于linux设备模型kobject,kset,ktype
- 关于linux设备模型kobject,kset,ktype
- Linux 设备模型之 (kobject、kset 和 Subsystem)(二)
- Linux设备模型,底层原理简介-[Kobject、Kset 和 Subsystem]
- Linux设备驱动模型学习笔记(kobject,kset,subsystem子系统)
- linux总线设备驱动模型之Kobject&Kset
- Linux设备模型(二) kobject和kset
- Linux设备模型之注册kobject和 kset
- Linux设备模型--kobject & kset
- 关于linux设备模型kobject,kset,ktype
- 关于linux设备模型kobject,kset,ktype
- Linux设备模型--kobject&kset
- 嵌入式Linux驱动笔记(十六)------设备驱动模型(kobject、kset、ktype)
- Linux设备模型--kobject&kset