Linux下如何获取USB统计信息?排查数据接收中断问题
查看Linux USB主机的接收字节数与错误状态
1. 通过sysfs读取USB设备统计数据
Linux的sysfs文件系统提供了USB设备的详细统计信息,可直接查看指定USB连接的接收字节数和错误:
- 先用
lsusb命令定位目标设备,例如输出中会显示Bus 001 Device 003: ID xxxx:yyyy 设备名称,其中Bus 001和Device 003对应设备在sysfs中的路径(可进入/sys/bus/usb/devices/目录,找到匹配的设备节点,如1-2)。 - 进入目标设备目录后,找到输入端点(通常命名为
ep8x,8代表IN方向,即设备到主机),例如ep81:- 查看累计接收字节数:
cat ep81/rx_bytes - 查看接收相关错误:
cat ep81/errors(部分设备可能有细分的rx_errors文件)
- 查看累计接收字节数:
如果应用停止接收时,rx_bytes仍持续增长,说明USB驱动层已成功接收数据,问题出在应用层或用户态数据传递环节;若rx_bytes停止增长,则说明驱动层未收到数据,需排查USB链路或设备端问题。
2. 用usbmon监控USB总线传输
usbmon是内核提供的USB总线监控工具,可捕获所有USB传输细节,包括成功/失败的数据包:
- 加载内核模块:
modprobe usbmon - 选择对应总线监控(对应
lsusb中的总线号,如总线1):- 直接读取监控文件:
cat /sys/kernel/debug/usb/usbmon/1u - 或用
tcpdump解析:tcpdump -i usbmon1 -v
- 直接读取监控文件:
通过usbmon输出可查看每个USB请求块(URB)的传输状态,排查是否存在传输超时、CRC错误、端点挂起等异常。
3. 查看内核日志中的USB错误信息
内核会记录USB传输过程中的异常,可通过以下命令查看:
dmesg | grep -i usbjournalctl -k | grep -i urb
这些日志包含URB传输失败、设备断开重连、端点错误等关键信息,有助于判断驱动层或硬件链路的问题。
内容的提问来源于stack exchange,提问作者Chandan Gupta
相关产品推荐
相关产品推荐

