按照设备模型的总线,设备,驱动模式,一条总线会把所有这条总线上的设备和驱动都挂载到总线的设备链表和驱动链表上,具体到usb总线上,就是usb主控制器,hub等设备,都需要按照设备模型的要求,作为设备挂载到usb总线的设备链表上,同时也需要把usb主控制器,hub的驱动也挂载到驱动链表上,并且使得设备和设备驱动能够相互关联起来,才能使得设备能够使用,完成应有的设备功能。
那么usb hub驱动是如何被挂载的,驱动又是如何跟hub设备关联在一起的?
首先,要有一条usb总线,就必须有一个usb主控制器,一个usb主控制器对应一条usb总线。一个系统有多少个usb主控制器,就有多少条usb总线,我们常见的UHCI,OHCI,ECHI等,就是不同的usb主控制器类型。一般的,这些主控制器都是PCI接口的,通过加载对应的PCI设备驱动,使得系统增加了usb总线,而这些,都是在我们现在的工作之前完成的。
其次,现在的usb主控制器,都集成了一个根集线器,在我们驱动好usb主控制器后,接下来就是使用设备模型的方式,把根集线器(root hub)作为一个设备添加到usb总线的设备队列里,同时,从总线的驱动队列中查找是否有可以支持这个设备的驱动程序,如果查找到,就可以按照设备模型的三角关系,把设备,驱动,总线通过相应的指针关系,把他们都关联起来;如果找不到驱动,则root hub就不能正常的工作,只能在总线的设备队列中等待有驱动安装时,再匹配是否OK;如果一直都没有对应的驱动,则这条总线也就没有办法挂载其他的设备了。
Root hub匹配成功驱动后,就循环运行一个进程,以发现hub的端口有设备插入或拔除。
大致的流程图如下: