总线设备驱动模型——总线篇

本文深入解析Linux设备模型中的总线bus_type结构,包括struct bus_type、subsys_private、bus_attribute等核心组件,阐述总线初始化、注册过程及其实现细节,例如buses_init()、bus_register()函数的作用,以及如何通过module_init注册自定义总线。
摘要由CSDN通过智能技术生成

总线struct bus_type

    总线是处理器与设备之间的通道,在设备模型中,所有的设备都是通过总线相连的。在设备模型中,总线由bus_type表示。

struct bus_type {

    const char        *name;                   //总线类型名称

    struct bus_attribute    *bus_attrs;        //总线属性

    struct device_attribute    *dev_attrs;    //设备属性

    struct driver_attribute    *drv_attrs;    //驱动属性

 

    int (*match)(struct device *dev, struct device_driver *drv);  //匹配总线中的devdriver

    int (*uevent)(struct device *dev, struct kobj_uevent_env *env); //用于总线对uevent环境变量添加

    int (*probe)(struct device *dev);          //总线匹配成功时会调用,busdrvprobe中只有一个起效//,如果bus存在就调用bus->probe

    int (*remove)(struct device *dev);         //总线上设备或者驱动删去时调用

    void (*shutdown)(struct device *dev);     //函数在所有设备都关闭时候调用

    int (*suspend)(struct device *dev, pm_message_t state);//总线上设备休眠

    int (*resume)(struct device *dev);          //处理热插拔、电源管理

 

    const struct dev_pm_ops *pm;

 

    struct iommu_ops *iommu_ops;

 

    struct subsys_private *p;         //busdevicedriversysfs联系起来

};

struct subsys_private

    其中最后一个指向subsys_private的指针,定义了将bus同其他类型联系起来的关系,将bus同device、driver、sysfs联系起来。

subsys是kset类型,代表bus在sysfs中的类型

devices_kset代表bus目录下的device的子目录

driver_kset代表bus目录下的driver的子目录

klist_devices是bus的设备链表,klist_drivers是bus的驱动链表

struct subsys_private {

    struct kset subsys;

    struct kset *devices_kset;

 

    struct kset *drivers_kset;

    struct klist klist_devices;

    struct klist klist_drivers;

    struct blocking_notifier_head bus_notifier;

    unsigned int drivers_autoprobe:1;

    struct bus_type *bus;

 

    struct list_head class_interfaces;

    struct kset glue_dirs;

    struct mutex class_mutex;

    struct class *class;

};

总线属性struct bus_attribute

    linux设备中的每层都有自己特有的属性的表示方法bus_attribute

struct bus_attribute {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值