Linux 中的假 USB 集线器

Linux 中的假 USB 集线器

使用 Ubuntu 18.04,通过我的台式机主板,我获得:

$ lsusb -t
    /:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
    /:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M
        |__ Port 13: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 14: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 14: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
    /:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
        |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
    /:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
        |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M

主板上正好有 14 个 USB 物理连接器,相当于Bus 03.Port 1: Dev 1.任何新的 USB 设备(例如 USB 2.0 存储盘)都会在Bus 03.

所示的lsusb -t应该是本系统中所有的USB设备。然后:

1) 如果Bus 003单独能够覆盖主板上的所有物理 USB 连接器,Bus 001Bus 002和 是什么Bus 004

这个答案,在处理USB总线时,指出:

其中部分或全部可能具有用于插入各种 USB 外部设备的外部端口。

这意味着某些 USB 总线可能有外部端口。但是之后:

2)如果没有内部(例如焊接)设备连接到它们,并且也没有外部设备可以连接到它们,那么这种假总线有什么用?


编辑:(非常有用)答案涉及总线编号。相反,我的文章讨论了 Linux 内核列出某些 USB 总线的可能性,但它们并不对应于任何真正的总线。为什么会出现这些总线以及它们的用途是什么?这与简单地处理总线编号约定不同。我也坚信这是一个软件问题,因为它是关于 Linux 内核如何表示硬件的。

答案1

USB3 标准带来了 SuperSpeed 模式,以及新的电缆和连接器。您的总线 4 涵盖 SuperSpeed 模式,该模式在 USB 电缆中使用完全不同的一组电线。因此,由于高速模式在物理上与旧的 USB 接线是分离的,因此它完全作为单独的总线出现是有意义的。

剩下总线 1 和 2。它们基本上是为了允许使用 USB 键盘、鼠标和/或安装介质轻松安装 Windows 7 :-)

请记住,Windows 7(以及任何 USB3 之前的操作系统)没有内置 XHCI USB 控制器驱动程序。因此,作为向后兼容功能,您的系统还具有 EHCI USB2 控制器。系统固件可以选择最初仅启动 EHCI 控制器并将其连接到 USB 2 线路,而不是 XHCI 控制器。这允许操作系统安装程序使用键盘、鼠标和 USB 存储的普通旧式 EHCI USB 驱动程序启动并运行。

当安装适当的驱动程序并启动 XHCI 控制器时,有一个移交协议允许它接管 USB2 端端口的控制。此时,EHCI 控制器可以完全禁用。因此,您的 USB 总线 1 和 2 是两个廉价的向后兼容 EHCI 控制器,它们现在已将各自的 USB 端口移交给闪亮的新 XHCI 控制器。

请注意,两个 EHCI 控制器仅支持 2 个端口,并且它们与单独的根集线器对象连接,分别支持 8 个和 6 个端口,总共提供 14 个 USB2 端口 - 与单个根集线器处理的数量完全相同。总线 3,这是 XHCI 控制器的“慢”侧。

(当 USB 2 推出时,有一种类似的解决方案来解决向后兼容性问题:旧的 USB 1.1 UHCI/OHCI 控制器作为“配套控制器”与 USB 2.0 EHCI 控制器一起存在很长一段时间。但是该解决方案不包含移交协议,因此两代 USB 控制器并存了很长一段时间,规范制定者在 USB 3 中包含了移交协议,以期摆脱传统的 EHCI。控制器速度快一点。)

相关内容