首页 理论教育Linux内核总线型设备剖析

Linux内核总线型设备剖析

【摘要】:图3-14总线互连框架图3-14的右侧是硬件连接示意图,PCI总线上挂载音频设备和USB总线控制器,USB总线上连接的设备包括I2C总线控制器和USB网络设备,而在I2C总线上则连接一个温度传感器,这是典型的总线层级连接,涉及PCI、USB和I2C三种总线设备。总线控制器提供了该功能。总线控制器在不同的总线之间形成桥梁,并管理自己总线中连接的设备。这样具体设备就可以直接和总线控制器交互,由总线控制器屏蔽总线级联的差别。

总线型设备的主要功能是解决总线设备互连的问题,总线互连框架如图3-14所示。

978-7-111-49426-3-Chapter03-19.jpg

图3-14 总线互连框架

图3-14的右侧是硬件连接示意图,PCI总线上挂载音频设备和USB总线控制器,USB总线上连接的设备包括I2C总线控制器和USB网络设备,而在I2C总线上则连接一个温度传感器,这是典型的总线层级连接,涉及PCI、USB和I2C三种总线设备。图3-14的左侧是软件实现的框架图,可以看到,对功能驱动来说,其只见到实际设备最终连接的总线,而整个连接层次中的其他总线对功能驱动并不可见。这样做的好处就是,功能部分只关心直接连接的总线协议及其功能。什么屏蔽了不同总线连接的差异呢?总线控制器提供了该功能。总线控制器(如USB controller)在不同的总线之间形成桥梁,并管理自己总线中连接的设备。这样具体设备就可以直接和总线控制器交互,由总线控制器屏蔽总线级联的差别。

Linux内核同样为开发者提供了详细的总线信息,可以通过/sys/bus获得,笔者Linux机器显示该目录的信息如下:(www.chuimin.cn)

978-7-111-49426-3-Chapter03-20.jpg

这其中包含Linux内核支持的各种总线,有物理的总线(如i2c、spi、usb、pci、pci_express等),也有虚拟总线(如platform等)。虚拟总线是一种逻辑总线,主要是为了满足一种逻辑互连功能。连接的主体通常是设备和对应的驱动。总线的一个重要功能就是能够发现设备并找到合适的驱动来操作设备,这是逻辑总线的主要功能。Platform总线主要是为SoC内部设备而设计的,通过该总线可以将设备属性和驱动分离,从而可以使用相同的驱动来支持同一功能核心硬件的不同设备。

通过物理总线和虚拟的逻辑总线,可以对Linux内核所管理的设备进行更好的组织,并且可以通过抽象分离属性和操作,给系统带来更好的扩展性。后续章节会对总线设备进行更详细的介绍。