- 文档
- 教程
【免费下载链接】linux-command
Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux
lsusb是 Linux 系统中最常用的 USB 设备查询命令,用于显示本机 USB 主控制器(Bus)、设备编号(Device)以及设备 ID(Vendor:Product)等核心信息。本文以 Linux Command 开源项目(README)中收录的 lsusb 手册 为骨架,完整继承其语法、选项与实例解读,并结合同仓库的 lspci、systool、dmesg 等命令文档与 sysfs 内核信息,深入讲解如何读懂 lsusb 输出、如何通过/sys文件系统验证设备属性,以及如何在实际排查和 USB 驱动开发中高效使用它。读完本文,你将能够熟练使用 lsusb 完成设备枚举、按总线/厂商过滤、拓扑查看,并建立起「命令输出 ↔ sysfs 节点 ↔ 内核设备模型」的完整知识链路。
命令简介:一个认识 USB 设备的命令行助手
lsusb 命令用于显示本机的 USB 设备列表,以及 USB 设备的详细信息。它属于usbutils工具包,是学习 USB 驱动开发、认识 USB 设备的得力助手。如果你的开发板或产品中缺少该命令,可以自行移植一个放入文件系统(如使用 buildroot、busybox 集成 usbutils),即可获得设备枚举与诊断能力。
lsusb 的核心价值在于:它以极简的文本输出呈现 USB 总线拓扑中每一个被内核枚举到的设备,配合 sysfs 中的devnum、idVendor、idProduct等属性,能够让开发者快速定位「设备插在哪个主控制器下、内核给它分配了什么设备号、厂商与产品 ID 是什么」等一系列驱动开发与硬件调试中的关键问题。
安装 lsusb:不同发行版的 usbutils 获取方式
lsusb 由usbutils包提供,各主流发行版均收录。在 Alpine Linux 上,可以结合 apk 手册 中的示例直接安装:
apk add util-linux pciutils usbutils coreutils binutils findutils grep在 Debian/Ubuntu 系使用apt-get(参考 apt-get 手册):
sudo apt-get install usbutils在 CentOS/RHEL 系使用yum(参考 yum 手册):
sudo yum install usbutils安装完成后,直接执行lsusb即可看到本机 USB 设备列表。
语法与选项:五个核心参数全面解析
lsusb 的基本语法为:
lsusb(选项)原文档归纳了五个核心选项,下面逐项展开说明:
| 选项 | 作用 | 实战要点 |
|---|---|---|
-v | 显示 USB 设备的详细信息 | 输出设备描述符(Device Descriptor)、配置描述符、接口描述符等完整信息,调试驱动时的第一选择 |
-s<总线:设备号> | 仅显示指定总线和(或)设备号的设备 | 格式为Bus:Device,如lsusb -s 002:006只显示 002 号总线上设备号为 006 的设备,注意冒号为半角 |
-d<厂商:产品> | 仅显示指定厂商和产品编号的设备 | 格式为Vendor:Product,如lsusb -d 15d9:0a37,用于快速过滤特定型号设备 |
-t | 以树状结构显示 USB 设备的层次 | 直观展示「主控制器 → 根 Hub → 设备/子 Hub」的层级关系 |
-V | 显示命令的版本信息 | 确认 usbutils 工具版本,便于排查工具自身问题 |
其中-s与-d支持「只写一半」的过滤方式:例如lsusb -s 002可只按总线号过滤,lsusb -d 15d9:可只按厂商号过滤(lsusb -d :0a37则只按产品号过滤),这在设备众多时非常实用。
实战实例:插入 USB 鼠标后 lsusb 的输出解读
原文档给出了最典型的实战场景——插入 USB 鼠标后执行 lsusb,输出内容如下:
Bus 005 Device 001: id 0000:0000 Bus 001 Device 001: ID 0000:0000 Bus 004 Device 001: ID 0000:0000 Bus 003 Device 001: ID 0000:0000 Bus 002 Device 006: ID 15d9:0a37 Bus 002 Device 001: ID 0000:0000逐字段拆解如下:
Bus 005:USB 主控制器编号
Bus 005表示第五个 USB 主控制器(Host Controller)。机器上总共有 5 个 USB 主控制器,可以通过命令lspci | grep USB查看(详见 lspci 手册)。在 lspci.md 的实例输出中可以看到典型的 USB 控制器条目:
00:1d.0 USB controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #1 00:1d.7 USB controller: Intel Corporation 82801JI (ICH10 Family) USB2 EHCI Controller #1这些 UHCI/EHCI 控制器分别对应 lsusb 输出中的一个 Bus,多个控制器共同构成机器上的 USB 总线集合。
Device 006:内核分配的设备号(devnum)
Device 006表示系统给 USB 鼠标分配的设备号(devnum)。同时也可以看到该鼠标是插入到了第二个 USB 主控制器(Bus 002)上。
该设备号并非凭空而来,而是内核 USB 设备模型中的真实属性,对应 sysfs 节点:
006 usb_device.devnum /sys/devices/pci0000:00/0000:00:1d.1/usb2/2-2/devnum可以看到设备号 006 与devnum文件一一对应,说明 lsusb 输出的正是内核设备模型的状态,而非独立维护的另一套数据。
ID 15d9:0a37:厂商 ID 与产品 ID
ID 15d9:0a37表示 USB 设备的 ID。这个 ID 由芯片制造商设置,可以唯一标识该设备。冒号前的15d9是厂商 ID(Vendor ID),冒号后的0a37是产品 ID(Product ID),分别对应 USB 设备描述符(Device Descriptor)中的idVendor与idProduct字段:
15d9 usb_device_descriptor.idVendor 0a37 usb_device_descriptor.idProduct /sys/devices/pci0000:00/0000:00:1d.1/usb2/2-2/idVendor通过lsusb -d 15d9:0a37即可只过滤出这一款设备,lsusb -v则可以展开看到该描述符的完整字段。
区分根 Hub 与真实设备
观察上述输出中的最后两行:
Bus 002 Device 006: ID 15d9:0a37 Bus 002 Device 001: ID 0000:0000表示 002 号 USB 主控制器上接入了两个设备:
- 一个是 USB 根 Hub ——
Device 001 - 一个是 USB 鼠标 ——
Device 006
这是 USB 拓扑的典型形态:每个主控制器下必然挂载一个根 Hub(设备号通常为 001,ID 为0000:0000),真实设备通过端口连接到 Hub 之下。理解这一点有助于在输出列表中快速辨认「控制器自带节点」与「真实外设」。
使用 -t 查看设备层次拓扑
lsusb -t以树状结构展示设备层次,与上述「根 Hub → 设备」的结构一一对应:
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M |__ Port 1: Dev 6, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M从该输出可以清晰看到:Bus 02下的Dev 1是root_hub,其Port 1上的Dev 6是鼠标,接口类为 HID,由usbhid驱动接管,通信速率为 1.5M(低速设备)。这正是原文档「002 号主控制器上接入根 Hub 与鼠标两个设备」结论的树状呈现。
深挖 sysfs:lsusb 输出背后的内核设备模型
lsusb 的输出可以直接与/sys文件系统互相印证。原文档给出的 sysfs 路径\/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-2/` 完整反映了设备在 PCI → USB 总线 → 端口链路上的位置:
pci0000:00/0000:00:1d.1:USB 控制器在 PCI 总线上的地址(与 lspci 手册 中00:1d.1 USB controller对应);usb2:该控制器对应的 USB 总线号(Bus 002);2-2:设备在总线上的端口路径,其中第一个2是总线号,第二个2是 Hub 端口号;devnum、idVendor、idProduct:设备属性文件,内容与 lsusb 输出的 Device 号、ID 完全一致。
如果想要更系统地浏览内核设备模型中的 USB 子系统,可以参考 systool 手册:systool -b usb可查看 USB 总线上的设备,systool -c usb_device可查看 usb_device 类属性,其输出中列出的usb总线与usb_device、usb_endpoint、usb_host等类,正是 sysfs 中 USB 设备模型的全貌。同时,ehci_hcd、uhci_hcd、usbcore、usbhid等模块也出现在 systool 的模块列表中,印证了 USB 主机控制器驱动与设备驱动在内核中的注册关系。
组合排查:lsusb 与 lspci、dmesg 的协同工作流
在实际嵌入式开发与服务器运维中,lsusb 常与其他命令组合形成排查链路:
- 确认控制器存在:
lspci | grep USB(见 lspci.md),确认机器上 USB 控制器的数量与型号,与 lsusb 输出的 Bus 数量对照; - 确认内核枚举日志:
dmesg | grep -i usb,查看设备插拔时的内核日志(dmesg.md 中展示了通过dmesg | grep -E过滤多关键字的用法),判断设备是否被正确识别; - 确认设备属性:
lsusb/lsusb -t查看枚举结果,cat /sys/.../idVendor验证底层属性。
典型场景举例:嵌入式开发板上插入 USB 外设后无反应,可依次执行lsusb(设备是否出现)、lspci | grep USB(控制器是否枚举)、dmesg | grep usb(内核是否报错),三步即可定位问题发生在硬件、控制器驱动还是设备驱动层面。
对 USB 驱动开发的学习价值
正如原文档所强调,lsusb 是学习 USB 驱动开发、认识 USB 设备的助手。对于驱动开发者而言,它提供了三重价值:
- 设备枚举速查:
lsusb一行输出即可确认设备是否被内核枚举成功,是驱动调试的第一道门槛; - 描述符信息入口:
lsusb -v展开的完整描述符(厂商/产品 ID、端点、接口类)与内核 sysfs 中的idVendor、idProduct、devnum一一对应,帮助理解 USB 设备描述符结构; - 与设备模型的对应关系:Bus/Device/ID 三元组与 sysfs 路径的映射关系,帮助开发者理解 Linux USB 设备模型(Host Controller → Root Hub → 设备)的组织方式。
需要注意的是,lsusb 显示的是「内核已枚举到的设备」,如果设备硬件损坏、线缆异常或控制器驱动未加载,设备可能不会出现在列表中,此时应结合dmesg与lspci进一步排查。
总结
lsusb 是 Linux 下查看 USB 设备列表与详细信息的基础命令,语法简单但信息密度高。掌握其-v、-s、-d、-t、-V五个选项,读懂 Bus/Device/ID 三个字段的含义,并建立「lsusb 输出 ↔ sysfs 属性 ↔ lspci/dmesg 日志」的联动排查思路,无论是日常运维、嵌入式开发板调试还是 USB 驱动开发,都能事半功倍。本仓库收录的 lsusb 手册 与 lspci、systool、dmesg 等文档互为补充,构成了一套完整的 Linux 设备管理命令速查体系,可通过本仓库生成的 Web 站点(见 README.md)随时检索使用。
- 文档
- 教程
【免费下载链接】linux-command
Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux
相关推荐
Linux lspci 命令详解:查看 PCI 总线与硬件设备信息的实战指南
Linux lspci 命令详解:查看 PCI 总线与硬件设备信息的实战指南 本文是 linux command 开源仓库中 lspci 命令手册 https:
文档教程Velero `ark backup describe` 命令完全指南:备份详情查看与故障排查实战
Velero ark backup describe 命令完全指南:备份详情查看与故障排查实战 导读 本文档是 Velero(当时名为 Heptio Ark)v
云原生灾备存储后端Velero(Ark)`describe restores` 命令详解:Restore 状态查看与排查实战指南
Velero(Ark) describe restores 命令详解:Restore 状态查看与排查实战指南 导读 本文以 Velero(曾用名 Ark)的 a
云原生灾备存储后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考