I2C驱动体系结构一:驱动软件概念与对应硬件的关系

一、概念:

1、设备:struct device:该数据结构是对物理设备的软件抽象,比如I2C slave(对应i2c_client)和I2C 适配器(对应i2c_adapter)都是对应物理设备的软件表达;

2、驱动:struct device_driver:该数据结构是对设备驱动的表达,从该数据结构的命名来看,它表达的意思是设备的驱动,从其回调函数成员变量来看,它实际是对struct device的管理(包括检测、电源管理);但是并不包括对设备的功能性操作。可以说struct device_driver使用struct device实现了对具体物理设备的管理。

3、总线:struct bus_type:这个数据结构从名字看似乎很容易理解,总线,但是在计算机体系里,总线这个词本身就很抽象,到底什么是计算机体系的总线,struct bus_type能否表达计算机系统中的总线呢?从kernel的注释上看,struct bus_type是表示处理器与一个或多个设备之间的通道。从设备模型上看,所有设备都是通过“总线”进行连接。

* A bus is a channel between the processor and one or more devices. For the
 * purposes of the device model, all devices are connected via a bus, even if
 * it is an internal, virtual, "platform" bus. Buses can plug into each other.
 * A USB controller is usually a PCI device, for example. The device model
 * represents the actual connections between buses and the devices they control.
 * A bus is represented by the bus_type structure. It contains the name, the
 * default attributes, the bus' methods, PM operations, and the driver core's
 * private data.
 */

但是这里如果完全把struct bus_type理解成物理意义上的连接关系会十分费解,因为从物理上看,“总线”和“适配器”往往是说的一个意思;“物理设备”挂在到“适配器”下,从这个角度上看,“适配器”作为“总线”的实际物理设备是合适的;但是从设备模型驱动上看,控制器往往是作为一个“struct device”(如 struct i2c_adapter),并且也是挂在到“struct bus_type”下,所以从这个角度看,“struct bus_type”不能完全对应适配器,那么"struct bus_type"到底怎么理解呢?我认为可以按照如下的角度理解:

1、将“适配器”作为“总线”和“设备”两种角色的集合;

2、"struct bus_type"的角色承担上述“总线”的功能,包括对外提供probe、match等接口从总线的角度实现设备的检测;

3、"struct bus_type"的角色还承担"容器"的功能,"容纳"了向该bus注册的device及device_driver,至于device与device_driver的对应关系,由device和device_driver自身管理

二、is_a or has_a

C语言的语法并不完整清晰支持面向对象的设计,但是通过上下文理解和数据结构的组成形式,也可以从对象的角度进行一定程度的抽象分析。比如:

struct i2c_adapter/i2c_client {

......

struct device dev;

};

我们可以将struct i2c_adapter,struct i2c_client与struct device的关系理解为 is_a 的关系,即,struct i2c_adapter/i2c_client是struct device的子类

struct bus_type:可以看到该数据结构的主体成员是多个回调函数成员,我们可以认为struct bus_type是一个抽象结构,struct bus_type i2c_bus_type可以认为是struct bus_type的实现类,因此也可以认为 i2c_bus_type这个变量是struct bus_type的子类

struct bus_type中有一个struct subsys_private的指针结构,这是一个“容器”,记录了“挂载”在该"bus"上的struct device及struct device_driver,在这个地方,可以认为struct bus_type与struct device/struct device_driver是has_a的关系。

上图是I2C设备模型数据结构纯软件上的关系图

三、物理连接

I2C子系统,在物理上的连接实际十分明显,如下:

上图是硬件连接示意图。

从上述两个图看,一个是软件上的关系图,一个是硬件上的关系图,两者很难和谐的统一起来。

设备模型软件上的关系图如何与硬件上的连接图相映射,下一章再进行讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值