总线模型

总线描述

struct busy_type

{ struct bus_attribute,

   match,

   uevent,....

总线属性

struct busy_attribute

{ struct attribute attr;

    show

    store  

初始化做两件事:

    总线注册

    bus_register(&my_bus_type)

    创建属性文件

    bus_create_file(struct bus_type *bus, struct bus_arrtibute *attr)

     创建属性文件前需要定义bus_type 和 bus_arrtibute 结构

 

/sys/bus下看到创建的总线文件

在Linux设备驱动中,总线模型是核心架构的重要组成部分,围绕“总线–设备–驱动”展开 [^1]。 总线可分为真实的物理总线和虚拟总线。真实的物理总线包括USB总线、I2C总线、PCI总线等;虚拟总线如Platform总线,是为了驱动模型架构而设计出来的 [^1]。 总线存在的目的是把设备和对应的驱动绑定起来,类似于生活中的红娘角色,使内核形成有序的管理环境 [^2]。 在SOC中,有些外设原本没有总线概念,但为了使用总线、驱动和设备模型,Linux提出了platform这个虚拟总线,相应地有platform_driver和platform_device [^3]。 Linux系统内核使用bus_type结构体表示总线,该结构体包含总线名字、设备属性、驱动属性等成员,还定义了一系列用于匹配、探测、移除等操作的函数指针 [^3]。 ```c struct bus_type { const char *name; /* 总线名字 */ const char *dev_name; struct device *dev_root; struct device_attribute *dev_attrs; const struct attribute_group **bus_groups; /* 总线属性 */ const struct attribute_group **dev_groups; /* 设备属性 */ const struct attribute_group **drv_groups; /* 驱动属性 */ int (*match)(struct device *dev, struct device_driver *drv); int (*uevent)(struct device *dev, struct kobj_uevent_env *env); int (*probe)(struct device *dev); int (*remove)(struct device *dev); void (*shutdown)(struct device *dev); int (*online)(struct device *dev); int (*offline)(struct device *dev); int (*suspend)(struct device *dev, pm_message_t state); int (*resume)(struct device *dev); const struct dev_pm_ops *pm; const struct iommu_ops *iommu_ops; struct subsys_private *p; struct lock_class_key lock_key; }; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值