lsusb可直接确认usb设备是否被内核识别:执行不带参数的lsusb,若输出含“bus x device y: id xxxx:xxxx”行,说明枚举完成、地址分配成功;无此行但dmesg显示“new usb device”,则通信成功但id未收录;若dmesg也无响应,需排查线缆、供电或端口问题。

lsusb 能直接列出系统已枚举的 USB 接口设备,但注意:它显示的是“被内核识别的设备”,不是物理接口总数,也不是所有插槽状态。
用 lsusb 确认设备是否被内核识别
运行不带参数的 lsusb 是最快验证方式。只要输出里出现 Bus X Device Y: ID xxxx:xxxx 这样的行,就说明设备已完成枚举、分配了地址、读取了基础描述符——这是 USB 通信成立的前提。
- 刚插上设备后立即执行可能看不到,等 2–3 秒再试
- 如果
lsusb没新行,但dmesg | tail -10显示new high-speed USB device,说明硬件通信成功,只是 ID 未收录(描述会是Unknown) - 若
dmesg也无动静,问题大概率在线缆、供电或端口本身,不是驱动或配置问题 -
lsusb不需要 root 权限,但部分深层字段(如字符串描述)需sudo才能读取
用 lsusb -t 查物理连接与真实速率
lsusb -t 是唯一能反映实际物理拓扑和协商速率的命令。USB 是树状结构,不是扁平列表:主机控制器 → Root Hub → 下级 Hub → 终端设备。树中每条分支末尾的 12M、480M、5000M 是当前实际运行速率,不是接口标称值。
-
5000M表示走 USB 3.0(Gen1)通道;若设备标称 USB 3.0 却只显示480M,很可能是插在了 USB 2.0 Hub 下游,或线缆不达标 - 看到
Driver=usbhid或Driver=uas,说明驱动已绑定;Driver=(none)则需检查模块是否加载(如modprobe uas)或固件是否缺失 - 虚拟机中运行
lsusb -t只能看到虚拟 Hub(如VMware, Inc. Virtual USB Hub),无法反映真实物理插口
用 lsusb -d 和 lsusb -s 快速定位特定设备
全量 lsusb 输出在多设备场景下难以扫读,-d 和 -s 是精准过滤的核心手段,避免人工误判。
-
lsusb -d 0951:1665:按厂商 ID:产品 ID 筛选(如 Kingston U 盘),匹配则输出一行,不匹配静默(返回值为 1) -
lsusb -s 1:4:按总线号:设备号定位(Bus 001 Device 004→1:4,前导零必须省略) -
lsusb -s 002::冒号不能省,用于列出总线 002 上所有设备,适合多控制器平台聚焦排查 -
lsusb不支持多 ID OR 查询,要查多个 ID 得用grep -E '046d:0825|046d:c52b'或写简单循环
为什么 lsusb 看不到 /dev/ttyUSB0 或 /dev/sdb
lsusb 只管 USB 协议层识别,不管设备节点映射。/dev/ttyUSB0 属于串口类设备,依赖 usbserial、ch341、cp210x 等模块加载;/dev/sdb 是块设备节点,依赖 usb-storage 或 uas 驱动绑定成功并由 udev 创建。
- 设备在
lsusb中可见,但没生成/dev/ttyUSB*,先查模块:lsmod | grep -E "(usbserial|ch341|cp210x)",缺则sudo modprobe xxx - 有
/dev/sdb但lsusb没输出?不可能——块设备节点生成的前提是 USB 子系统已枚举该设备 - 想确认串口类设备是否被识别为 CDC ACM,可用:
lsusb -v -d VID:PID 2>/dev/null | grep -i "bInterfaceClass.*02"
真正容易被忽略的是:速率降级往往藏在 lsusb -t 的缩进层级里,而不是设备 ID 本身;而驱动未加载时,Driver=(none) 这个提示比任何错误日志都直接——但它只出现在 -t 或 usb-devices 输出中,不在基础 lsusb 里。











