直接运行lsusb即可确认设备是否被内核识别——只要输出含“bus x device y: id xxxx:xxxx”行,说明物理连接成功且总线枚举完成;无此行则大概率未通电或接触不良,此时应优先排查硬件而非驱动或挂载点。

直接运行 lsusb 就能确认设备是否被内核识别——只要输出里出现 Bus X Device Y: ID xxxx:xxxx,说明物理连接和总线枚举已完成;看不到这一行,设备大概率没通电或接触不良。
怎么快速判断USB设备是否被系统看见
别急着查驱动或挂载点,先看 lsusb 最原始的输出:
-
lsusb不需要 root 权限,普通用户就能执行,它只反映 USB 总线层的识别状态,和 /dev/ttyUSB0 或 /dev/sdb 是否存在无关 - 插上设备后等 2–3 秒再执行一次,避免因枚举延迟误判
- 如果输出里有新行(比如
Bus 001 Device 004: ID 0951:1665 Kingston Technology DataTraveler SE9),ID 后面的0951:1665就是硬件唯一标识,后续所有排查都靠它 - 如果
lsusb完全没新行,但dmesg | tail -10显示new high-speed USB device,说明通信成功,只是 ID 没收录在/usr/share/hwdata/usb.ids里,设备名会显示为Unknown
怎么查清物理连接位置和真实协商速率
lsusb -t 是唯一能暴露 USB 树状拓扑和实际速率的命令:
- 缩进层级对应物理连接:根 Hub → 下级 Hub → 终端设备;
|__ Port 2: Dev 5这类路径能帮你反推设备插在哪个物理口 - 末尾标注的速率(如
5000M、480M、12M)是真实协商结果,不是标称规格——一个 USB 3.0 U 盘插在 USB 2.0 Hub 下,这里只会显示480M - 输出里带
Driver=xxx表示内核已成功加载驱动;Driver=(none)说明识别了硬件但没绑驱动,得结合dmesg | tail -20看热插拔时有没有报错(比如device descriptor read/64, error -71) - 虚拟机里跑
lsusb -t可能只看到虚拟 Hub(如VMware, Inc. Virtual USB Hub),真实拓扑被抽象掉了
怎么精准定位某个设备并确认驱动绑定
系统连了多个 U 盘、摄像头或串口设备时,全量 lsusb 太干扰,必须用筛选:
-
lsusb -d 046d:0825:按厂商 ID:产品 ID 精确过滤,适合已知硬件型号的场景(比如罗技摄像头) -
lsusb -s 1:4:按总线号:设备号定位,其中1:4必须严格匹配lsusb输出第一列的Bus 001 Device 004,写成001:004或多空格都会报Cannot find device -
usb-devices比lsusb更底层,输出按段落组织,每段以T:开头,重点关注:Spd=(协商速率)、Driver=(当前绑定驱动)、Lev=(层级深度) - 如果
Driver字段为空,usb-devices仍可能显示Configurations=1或bMaxPower=,说明设备供电正常、描述符可读,问题出在驱动链路上
为什么 lsusb 看得见但设备不能用
lsusb 只管“连上了没”,不管“能不能干活”。常见断点在它之后的几层:
- U 盘插着但没挂载?查
lsblk或findmnt,不是lsusb的事 -
/dev/ttyUSB0没生成?那是usbserial或cp210x模块加载后的事,lsusb看不到节点 - 设备显示为
Device a0d3这种模糊名?加-nn参数(lsusb -nn)强制输出十六进制 ID,再查数据库或内核日志 - 某些发行版(如 CentOS 7)默认不装
usbutils,lsusb报command not found,得先sudo yum install usbutils
真正容易被忽略的是:USB 设备识别分四层——物理连接 → 总线枚举(lsusb 层)→ 驱动绑定(usb-devices 和 dmesg 层)→ 设备节点生成(ls /dev 层)。卡在哪一层,就得用对应的工具查,混用只会浪费时间。











