linux设备驱动的模型详解

本文详细介绍了Linux设备驱动模型,包括kobject、ktype、kset等核心组件,阐述了设备、驱动、总线和类的概念,以及它们在sysfs和udev中的作用,旨在理解设备驱动模型的组织方式和功能。
摘要由CSDN通过智能技术生成

一、什么是设备驱动模型
(1)类class、总线bus、设备device、驱动driver 四个结构体
(2)kobject和对象生命周期
(3)sysfs cat 查看属性信息 、 echo 往里面写东西
(4)udev 同步信息

2、设备模型解决了一些什么问题?
(1)设备驱动模型负责统一实现和维护一些特性,诸如:电源管理、热插拔、对象生命周期、用户空间和驱动空间的交互等基础设施
(2)设备驱动模型目的是简化驱动程序编写,但是客观上设备驱动模型本身设计和实现很复杂

二、设备驱动模型的底层架构
1、、kobject
(1)定义在linux/kobject.h中
(2)各种对象最基本单元,提供一些公用型服务如:对象引用计数、维护对象链表、对象上锁、对用户空间的表示这里写代码片
(3)设备驱动模型中的各种对象其内部都会包含一个kobject
(4)地位相当于面向对象体系架构中的总基类

struct kobject {
    const char *name;                    /* 对应sysfs的目录名 */
    struct list_head entry;              /* kobjetct双向链表 */
    struct kobject *parent;        /* 指向kset中的kobject,相当于指向父目录 */
    struct kset *kset;                   /*指向所属的kset */
    struct kobj_type *ktype;              /*负责对kobject结构跟踪*/
    struct sysfs_dirent *sd; 
    struct kref kref;                     /*kobject引用计数*/
    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;
};

kobject结构是组成设备模型的基本结构,最初kobject设计只用来跟踪模块引用计数,现已增加支持,
—— sysfs表述:在sysfs中的每个对象都有对应的kobject
—— 数据结构关联:通过链接将不同的层次数据关联
—— 热插拔事件处理:kobject子系统将产生的热插拔事件通知用户空间
kobject一般不单独使用,而是嵌入到上层结构(比如struct device,struct device_driver)当中使用。kobject的创建者需要直接或间接设置的成员有:ktype、kset和parent。kset我们后面再说,parent设置为NULL时,kobject默认创建到/sys顶层目录下,否则创建到对应的kobject目录中。重点来分析ktype成员的类型。

2、kobj_type
(1)很多书中简称为ktype,每一个kobject都需要绑定一个ktype来提供相应功能
(2)关键点1:sysfs_ops,提供该对象在sysfs中的操作方法(show和store)
(2)关键点2:attribute,提供在sysfs中以文件形式存在的属性,其实就是应用接口

struct kobj_type {
    void (*release)(struct kobject *kobj); /* 释放 */
    const stru`这里写代码片`ct sysfs_ops *sysfs_ops; /* 默认属性实现 */
    struct attribute **defa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值