Intel支持USB 3.0主机控制器的主板上一般具有2个EHCI和1个XHCI,这种主板一般有14个端口,并且端口0-3是EHCI和XHCI共用的,也即在0-3号端口具有4个开关,这4个开关的控制寄存器位于XHCI的PCI(PCI-E)配置空间,PC上控制这4个开关是在BIOS里配置的,由于很多主板默认没有开启,导致用户买了电脑后,虽然电脑有蓝色的USB端口,但是插上3.0的U盘还是按照高速来运行的,所以要使你的蓝色USB端口能够连接超速设备,需要确认你的主板集成了XHCI控制器,并且在BIOS里打开了XHCI的端口路由功能,如图1所示。
Linux系统中,可以在内核里完成EHCI和XHCI的0-3号端口切换,代码参见pci-quirks.c中的usb_enable_xhci_ports()和usb_disable_xhci_ports()函数。
Intel在Windows操作系统里也提供了端口切换驱动,驱动文件名叫做iusb3hcs.sys和iusb3hcs.inf (Intel USB 3.0 Host Controller Switch Driver)。
图1
XHCI控制器的roothub配置如图2所示,XHCI控制器实际上具有两个roothub,一个是roothub 2.0的,一个是roothub 3.0。最终由电脑整机生产商来决定导出几个USB 2.0和USB 3.0口。
因为XHCI的这个特性,在Linux内核里,如果发现了PCI(PCI-E)总线上具有XHCI控制器,那么驱动会向USB Core子系统注册两个roothub控制器,一个是roothub 2.0,一个是roothub 3.0,代码参见xhci-pci.c中的xhci_pci_probe()函数。这个代码是Intel的一个叫Sarah Sharp的妹子写的,超级NB。
图2
Intel 主板 USB 3.0 XHCI控制器端口配置,布布扣,bubuko.com