首页 理论教育深入剖析Linux内核:总线控制器与设备无关

深入剖析Linux内核:总线控制器与设备无关

【摘要】:总线控制器是一个服务管理的实体,要能为所有连接到总线上的设备进行服务,并管理它们,不至于彼此冲突。可见总线控制器和总线设备两者要完成的任务有联系,但是彼此不能限定对方,这就要求实现总线控制器和总线设备的无关。图3-18和图3-19分别展示了Linux内核在USB和I2C总线框架上如何实现总线控制器和总线设备无关。可见总线核心是要同时管理总线控制器和总线设备的。

对总线来说,总线设备的多样性是一个方面,另一个方面处理器中对总线的管理也是多样的。比如USB总线,Intel处理器的总线管理设备(即总线控制器)和ARM处理器的总线管理设备就有很大的差别。总线上连接的设备并不想知道自己具体和哪些总线管理设备进行交互。总线控制器只关注于具体的总线操作,所以总线控制器也并不关心连接在总线上的设备如何使用总线实现其功能。总线控制器是一个服务管理的实体,要能为所有连接到总线上的设备进行服务,并管理它们,不至于彼此冲突。

可见总线控制器和总线设备两者要完成的任务有联系,但是彼此不能限定对方,这就要求实现总线控制器和总线设备的无关。

图3-18和图3-19分别展示了Linux内核在USB和I2C总线框架上如何实现总线控制器和总线设备无关。

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

图3-18 USB总线框架

从图3-18和3-19中可见,不同的总线框架解决总线控制器和总线设备无关是使用了相同的方法,就是抽象出总线核心来管理总线控制器和总线设备,并将两者有机的结合。对于USB总线有USB Core,对于I2C总线有I2C Core,都是完成总线核心的功能。

可见总线核心是要同时管理总线控制器和总线设备的。如图3-20所示,以USB总线为例展示了Linux内核如何实现该功能。(www.chuimin.cn)

从图3-20中可见,无论是总线控制器USB adapter还是总线设备USB device都会注册到USB core中,这样USB core就可以对两者进行管理。这其中的管理还包括在两者之间进行必要的绑定,比如说连接到USB总线控制器的USB设备,其操作必然要经过该总线控制器完成。这种绑定都可以通过USB设备发现由USB Core自动完成。

通过这些方法就能够实现总线控制器和总线设备无关。

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

图3-19 I2C总线框架

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

图3-20 Linux内核USB管理框架