据我了解,连接到不同控制器的设备应该显示在不同的 USB 总线下。但是,当我将键盘连接到 xHCI 控制器时,它仍然列在其中一条 EHCI 总线下。查看>>>>
列表中的标记:
$ lspci | grep -i usb
>>>> 00:14.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI (rev 04)
00:1a.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #2 (rev 04)
00:1d.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #1 (rev 04)
$ lspci -vs 00:14.0
00:14.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI (rev 04) (prog-if 30 [XHCI])
Subsystem: ASUSTeK Computer Inc. 8 Series/C220 Series Chipset Family USB xHCI
Flags: bus master, medium devsel, latency 0, IRQ 27
Memory at ef920000 (64-bit, non-prefetchable) [size=64K]
Capabilities: [70] Power Management version 2
Capabilities: [80] MSI: Enable+ Count=1/8 Maskable- 64bit+
Kernel driver in use: xhci_hcd
所以我确实有一个 xHCI 控制器。它是主板上的一个单独的物理端口。
$lsusb
Bus 002 Device 002: ID 8087:8000 Intel Corp.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8008 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
>>>> Bus 004 Device 002: ID 174c:3074 ASMedia Technology Inc. ASM1074 SuperSpeed hub
>>>> Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 014: ID 046d:c03d Logitech, Inc. M-BT96a Pilot Optical Mouse
Bus 003 Device 015: ID 195d:2030 Itron Technology iONE
Bus 003 Device 013: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 003 Device 012: ID 0424:2228 Standard Microsystems Corp. 9-in-2 Card Reader
Bus 003 Device 011: ID 0424:2602 Standard Microsystems Corp. USB 2.0 Hub
Bus 003 Device 010: ID 0424:2512 Standard Microsystems Corp. USB 2.0 Hub
Bus 003 Device 003: ID 174c:2074 ASMedia Technology Inc. ASM1074 High-Speed hub
>>>> Bus 003 Device 016: ID 03f0:0024 Hewlett-Packard KU-0316 Keyboard
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
总线 004 上的“superspeed”3.0 集线器应该是 xHCI 控制器。然而,键盘连接到总线 003:
$lsusb -t
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
|__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M
>>>>|__ Port 1: Dev 16, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 3: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 10, If 0, Class=Hub, Driver=hub/2p, 480M
|__ Port 1: Dev 11, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 12, If 0, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 3: Dev 13, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 15, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 15, If 1, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 15, If 2, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 4: Dev 14, If 0, 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
事实上,无论我如何将设备连接到物理控制器,它们总是显示在同一总线下。有人知道会发生什么吗?
系统
Processor: Intel(R) Core(TM) i7-4771 CPU @ 3.50GHz
OS: Debian GNU/Linux testing (buster) with ACS patch, IOMMU enabled.
Kernel: Linux 4.10.0-acs+ (x86_64)
Version: #3 SMP PREEMPT Sun Feb 26 00:03:48 CET 2017
Processor: Intel(R) Core(TM) i7-4771 CPU @ 3.50GHz : 3900.00 MHz
Board: Asus Z87-PRO
BIOS: AMI version 1707, VT-d/x enabled
答案1
5G 模式下的 USB 3.0 与 USB 2.0 或更早版本不兼容,因此他们实现兼容性的方式是在传统设备上使用与 USB 2.0 相同位置的一对引脚,并为“真正的”USB 3.0 使用两个新引脚对设备,如您所见,例如引脚排列在维基百科上。
因此,您的00:14.0
xHCI 控制器实际上是两个控制器合二为一:一个 USB 2.0 传统控制器,用于每个连接器中的“旧”对,显示为总线 3(具有 14 个端口),以及一个“真正的”USB 3.0 控制器,用于两个“旧”连接器。每个连接器中都有新的”对,显示为总线 4(有 6 个端口)。
您的某些 USB 连接器将在您的 PC 上标记为蓝色,并且它们已连接到两个控制器。如果您插入 USB 2.0 设备,它将物理连接到总线 3,而如果您插入“真正的”USB 3.0,它将物理连接到总线 4。这就是为什么插入同一连接器的不同设备会显示在一辆或另一辆公共汽车。
另请注意,旧控制器具有更多端口,并且还连接到一些集线器。我不知道您是否连接了外部集线器以及数量,但主板上也有内部集线器。
因此,完全有可能您的所有连接器都属于 xHCI 控制器,而lspci
显示的其他两个 EHCI 控制器实际上并未连接到任何东西(或者可能连接到主板上的连接器)。
找出答案的方法是依次将 USB 2.0 设备连接到每个连接器,记下它在哪条总线上以及在哪个端口(以及集线器端口)下出现。然后用“真正的”USB 3.0 设备重复同样的练习,您就应该知道 USB 连接器是如何设置的。
答案2
xHCI 控制器实际上将两个总线合二为一。超高速巴士:
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
...以及传统的 USB2:
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M
请注意,两者都使用xhci_hcd
驱动程序。
这可能是为了最大限度地减少 USB 实现各层中旧的、速度较慢的设备对速度快得多的 USB3+ 设备的干扰。