设备驱动模型的相关概念:
1.主要完成的工作:在合适的时间对驱动进行安装,对驱动的函数进行调用;
2.模型的实现主要依靠四个结构体:类class、总线bus、设备device、驱动driver;
3.驱动模型的底层架构:kobject、kobj_type、kset.
驱动模型的底层架构的具体分析:
1.kobject:定义在 linux/kobject.h中,
(1)包含各种对象的基本单元;
(2)提供一些公用型服务如:对象引用计数(帮助维护驱动的生命周期)、维护对象链表(遍历驱动)、对象上锁(敏感操作的竞争状态的避免)、对用户空间的表示(在sysfs中可以看见设备驱动)。
(3)在设备驱动模型中的各种对象其内部都会包含一个kobject 。
(4)地位类似于面向对象的的体系架构中总基类。
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;
};
2.kobj_type:
struct kobj_type {
void (*release)(struct kobject *kobj);
const struct sysfs_ops *sysfs_ops;
struct attribute **default_attrs;
const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);
const void *(*namespace)(struct kobject *kobj);
};
(1)每一个kobject都需要绑定一个ktype来提供相应功能;
(2)sysfs_ops,提供该对象在sysfs中的操作方法(show和store);
(3)attribute,提供在sysfs中以文件形式存在的属性,其实就是应用接口
3.kset:
(1)做顶层kobject的容器类;
(2)是将各个kobject(代表着各个对象)组织出目录层次架构;
(3)可以认为kset就是为了在sysfs中生成目录,从而让设备驱动模型中的多个对象能够有层次有逻辑性的组织在一起。
总结:合起来完成sysfs中的文件以及文件相关的操作,而kobject是实现的软件基础,kobj_type是sysfs中每一个文件的实现和文件对应实际操作的实现,kset负责构建整个sysfs的目录架构。