linux查看usb控制器详细信息需结合lspci定位pci芯片型号及驱动状态,通过/sys/bus/usb/devices/usbx查看root hub的bcddevice、speed等属性确认协议版本与能力,并用lsmod/dmesg验证xhci_hcd等内核驱动是否加载,避免仅依赖lsusb导致混淆物理控制器与逻辑设备。

Linux 查看 USB 控制器详细信息,不能只靠 lsusb 看“设备”,得定位到控制器本身(即 root hub 和 host controller),并区分内核驱动、PCI 总线归属、USB 协议版本和实际能力。
查 USB 控制器对应的 PCI 设备及厂商型号
USB 控制器本质是 PCIe 设备,lspci 是唯一能直接看到物理芯片型号、厂商、Revision 和驱动绑定状态的命令。USB 子系统依赖它启动,但 lsusb 完全不暴露这一层。
-
lspci -nn | grep -i usb可列出所有 USB 相关 PCI 设备,输出形如:00:14.0 USB controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 [8086:2934] (rev 02) -
[0c03]是 PCI 类别码(USB controller),[8086:2934]是 vendor:device ID,可用于查芯片手册 - 注意区分 UHCI/OHCI/EHCI/XHCI:UHCI/OHCI 对应 USB 1.1,EHCI 是 USB 2.0,XHCI 是 USB 3.0+;现代主板基本只有 XHCI(
3.0或3.1)和可能并存的 EHCI(用于向后兼容) - 若某控制器显示
Kernel driver in use: xhci_hcd,说明已启用;若为unused,可能是 BIOS 关闭了该端口或内核未启用对应模块
看 root hub 的协议版本与供电能力
每个 USB 控制器在 /sys/bus/usb/devices/ 下都挂载一个 root hub(如 usb1、usb2),它不是普通设备,而是控制器的软件抽象。它的属性反映控制器真实能力。
- 先确认控制器编号:
lsusb -t输出顶部的/: Bus 01/行就是 root hub,对应/sys/bus/usb/devices/usb1 -
cat /sys/bus/usb/devices/usb1/bcdDevice显示固件版本,例如0310表示 USB 3.1 -
cat /sys/bus/usb/devices/usb1/speed显示当前运行速率(5000= USB 3.0,480= USB 2.0),但 root hub 永远报告其最大支持速率 -
cat /sys/bus/usb/devices/usb1/bMaxPower是 hub 自身功耗上限(单位 mA),非下游端口供电能力;真正给设备供电的是bHubContrCurrent(需用lsusb -v -s X:1查,其中:1是 root hub 的设备号)
确认内核是否加载对应 host controller 驱动
即使 lspci 显示控制器存在,若驱动未加载,整个 USB 子树都不会工作。关键不是看有没有 /dev/bus/usb/,而是看 lsmod 和 dmesg。
-
lsmod | grep -E "(xhci|ehci|uhci|ohci)_hcd":XHCI 驱动名是xhci_hcd,EHCI 是ehci_hcd,UHCI/OHCI 是uhci_hcd/ohci_hcd;没有输出即驱动未加载 -
dmesg | grep -i "xhci\|ehci":正常启动应有类似xhci_hcd 0000:00:14.0: xHCI Host Controller的行;若出现can't setup或init fail,说明硬件初始化失败 - 某些 ARM 平台(如树莓派)使用自定义驱动(如
dwc2+libcomposite),此时要查lsmod | grep dwc和cat /sys/class/udc/* - BIOS 中禁用 USB 3.0 时,XHCI 可能完全不被 PCI 枚举,
lspci里就看不到对应条目
区分 root hub 和普通 hub 的设备路径
/sys/bus/usb/devices/ 下的 usbX 是 root hub,而 X-Y、X-Y.Z 是下游设备。混淆这两者会导致误判控制器能力。
-
usb1是总线 1 的 root hub,1-1是插在它的 Port 1 上的设备(可能是另一个 hub 或终端设备) -
1-1:1.0表示该设备的第一个接口(interface 0),1-1.1才是级联在1-1Port 1 上的子设备 - root hub 的
idVendor和idProduct通常为1d6b:0002(USB 2.0)、1d6b:0003(USB 3.0),这是 Linux Foundation 的虚拟 ID,不代表真实芯片 - 想确认某个 USB 端口物理归属哪个控制器?用
lsusb -t看分支起点,再结合lspci -vv -s 00:14.0 | grep Bus查该 PCI 设备管理的 USB 总线号
最易忽略的一点:USB 控制器能力 ≠ 插口标称规格。主板上标“USB 3.2 Gen 2x2”的 Type-C 口,可能由单独的第三方控制器(如 VIA VL822)提供,lspci 里会多出一条记录,且驱动是 usbcore + via_vt6655 类模块——不查 PCI,只看 lsusb -t 会误以为它是主芯片直连。











