当前位置: 首页 > article >正文

【Linux】usb内核设备信息

usb内核设备信息


Linux内核中USB设备信息及拓扑结构可以从/sys/kernel/debug/usb/devices和/sys/bus/usb/devices中获取,下面介绍这些信息如何解读。

通过usbdump函数打印usb信息

[drivers/usb/core/devices.c]
#define ALLOW_SERIAL_NUMBER

/*
Bus:  总线编号
Lev:  USB总线拓扑层级,最大7层,Lev=0为Root hub
Prnt: 父设备的设备号
Port: 设备接入端口的端口编号,从0开始,Root hub默认为0,其他Hub的下行端口从0开始编号。 
Cnt:  相同拓扑层级上设备的数量
Dev:  设备编号
Spd:  速度
MxCH: Hub的Port数量
*/
static const char format_topo[] =
"\nT:  Bus=%2.2d Lev=%2.2d Prnt=%2.2d Port=%2.2d Cnt=%2.2d Dev#=%3d Spd=%-4s MxCh=%2d\n";

/*
Manufacturer: 厂商字符串
Product:      产品字符串
SerialNumber: 序列号
*/
static const char format_string_manufacturer[] =
  "S:  Manufacturer=%.100s\n";

static const char format_string_product[] =
  "S:  Product=%.100s\n";

#ifdef ALLOW_SERIAL_NUMBER
static const char format_string_serialnumber[] =
  "S:  SerialNumber=%.100s\n";
#endif

/*
Alloc: bFirstInterface
Int:   bInterfaceCount
Iso:   bFunctionClass, 同时会输出类的名称
*/
static const char format_bandwidth[] =
  "B:  Alloc=%3d/%3d us (%2d%%), #Int=%3d, #Iso=%3d\n";

/*
Ver:  bcdUSB
Cls:  bDeviceClass,同时会输出类的名称
Sub:  bDeviceSubClass
Prot: bDeviceProtocol
MxPS: bMaxPacketSize0
Cfgs: bNumConfigurations
*/
static const char format_device1[] =
  "D:  Ver=%2x.%02x Cls=%02x(%-5s) Sub=%02x Prot=%02x MxPS=%2d #Cfgs=%3d\n";

/*
Vendor: idVendor
ProdID: idProduct
Rev:    bcdUSB
*/
static const char format_device2[] =
  "P:  Vendor=%04x ProdID=%04x Rev=%2x.%02x\n";

/*
Ifs:    bNumInterfaces
Cfg:    bConfigurationValue
Atr:    bmAttributes
MxPwr:  bMaxPower * mul, USB_SPEED_SUPER: mul=8, 其他mul=2
*/
static const char format_config[] =
  "C:%c #Ifs=%2d Cfg#=%2d Atr=%02x MxPwr=%3dmA\n";

/*
FirstIf: bFirstInterface
IfCount: bInterfaceCount
Cls:     bFunctionClass, 同时会输出类的名称
Sub:     bFunctionSubClass
Prot:    bFunctionProtocol
*/
static const char format_iad[] =
  "A:  FirstIf#=%2d IfCount=%2d Cls=%02x(%-5s) Sub=%02x Prot=%02x\n";

/*
If:     bInterfaceNumber
Alt:    bAlternateSetting
EPs:    bNumEndpoints
Cls:    bInterfaceClass, 同时会输出类的名称
Sub:    bInterfaceSubClass
Prot:   bInterfaceProtocol
Driver: 使用的驱动名称
*/
static const char format_iface[] =
  "I:%c If#=%2d Alt=%2d #EPs=%2d Cls=%02x(%-5s) Sub=%02x Prot=%02x Driver=%s\n";

/*
Ad:     bEndpointAddress, I: 输入, O: 输出
Atr:    bmAttributes, 同时输出传输类型
MxPS:   一次传输最大包长度
Ivl:    interval
*/
static const char format_endpt[] =
  "E:  Ad=%02x(%c) Atr=%02x(%-4s) MxPS=%4d Ivl=%d%cs\n";


static ssize_t usb_device_dump(char __user **buffer, size_t *nbytes,
			       loff_t *skip_bytes, loff_t *file_offset,
			       struct usb_device *usbdev, struct usb_bus *bus,
			       int level, int index, int count);

示例

在这里插入图片描述

Bus: 总线编号
Lev: USB总线拓扑层级,最大7层,Lev=0为Root hub
Prnt: 父设备的设备号
Port: 设备接入端口的端口编号,从0开始,Root hub默认为0,其他Hub的下行端口从0开始编号。
Cnt: 相同拓扑层级上设备的数量
Dev: 设备编号
Spd: 速度
MxCH: Hub的Port数量

USB2.0总共3级

0级为roothub
MxCH=1 只有一个port
Dev# = 1 设备号为1,只有一个设备

1级接在0级hub的0号port上,自身具有4个port,设备号为2,只有一个设备

2级有2个设备,接在1级hub的00和02 port上,设备号分别为5和6,没有port
#ifs 表示有几个接口
Cfg# 表示有几个配置
#Eps表示有几个端点

/sys/bus/usb/devices下信息的具体含义:
该文件下面的设备信息的命名规则遵循下面2条原则,内核中的USB设备命名规则也遵循下面2条原则。

usbn: 表示USB总线,如果是USB3.0控制器,则会有2条总线,分别是usbn和usbn+1。
bus-port.port…:configuration:interface(总线-端口.端口…:配置:接口): Root Hub的端口号为0,其他Hub的下行端口从1开始编号。
下图是一个示例,设备信息可进入文件查看。

usb1表示USB1总线。
1-0:1.0表示usb1总线的Root Hub,使用配置1和接口0。
1-1表示USB1总线Root Hub下面接的设备,端口编号为1,属于第1级Hub。
1-1:1.0表示第1级Hub使用配置1和接口0。
1-1.1表示第1级Hub的端口1。
1-1.1:1.0表示第1级Hub的端口1下面的设备使用配置1和接口0。
1-1.3表示第1级Hub的端口3。
1-1.3:1.0表示第1级Hub的端口3下面的设备使用配置1和接口0。


http://www.kler.cn/a/447310.html

相关文章:

  • 数据结构_平衡二叉树
  • JAVA开发时获取用户信息失败,分析后端日志信息
  • vue 文本域 展示的内容格式要和填写时保持一致
  • Soul Android端稳定性背后的那些事
  • MSSQL AlwaysOn 可用性组(Availability Group)中的所有副本均不健康排查步骤和解决方法
  • spring使用rabbitmq当rabbitmq集群节点挂掉 spring rabbitmq怎么保证高可用,rabbitmq网络怎么重新连接
  • Elixir Supervisor
  • 青少年编程与数学 02-004 Go语言Web编程 12课题、本地数据存储
  • 智能电动汽车游智能化与电动化
  • IIC I2C子协议 SMBus协议 通信协议原理 时序 SMBus深度剖析
  • 智慧养老系统源码医院陪诊代办买药就医陪护上门护理小程序
  • 【蓝桥杯每日一题】扫描游戏——线段树
  • 以客户成功为核心,镜舟科技驱动数据库开源商业化创新
  • 【Spring】第二站:基于 <注解> 的方式实现Bean管理和注入管理
  • 算法刷题Day23:BM60 括号生成
  • CSS学习记录18
  • 什么是事务?隔离级别
  • 嵌入式单片机中外设的基本控制与实现
  • 游戏开发技能系统常用概念
  • Kafka 迁移 AutoMQ 时 Flink 位点管理的挑战与解决方案
  • 基于Spring Boot的智慧农业专家远程指导系统
  • 如何使用 Python 连接 MySQL 数据库?
  • Websocket客户端始终连接不上Server排查之Openai Realtime api
  • 基于 STM32 的多路火灾报警系统设计
  • LeetCode hot100-91
  • 高性能MySQL-查询性能优化