USB相关的sysfs文件
前言
在 sysfs 文件系统下,查看 USB 设备,看到一些乱七八糟的设备显示,它们都是什么呢?今天来介绍一下。
root@ATK-IMX6U:~# ls /sys/bus/usb/devices/
1-0:1.0 1-1 1-1.1 1-1:1.0 1-1.1:1.0 1-1.1:1.1 1-1.3 1-1.3:1.0 1-1.3:1.1 usb1
目录内容详解
常见的 USB 相关目录及其含义
/sys/class/usb_device
:- 包含所有已注册的 USB 设备的符号链接,这些链接指向实际的设备路径,允许访问设备的详细信息。
/sys/class/usb_gadget
:- 与 USB Gadget 子系统相关的节点,用于配置 Android 作为 USB 设备时的各项属性(如 Vendor ID、Product ID、功能等)。适用于当 Android 设备作为 USB 从设备(Device Mode)时的配置管理。
/sys/class/typec
:- 包含 Type-C 端口的状态和配置信息,尤其是当设备支持 USB Type-C 时,提供关于端口角色、数据传输模式等信息。
/sys/class/udc
:- 包含 USB Device Controller (UDC) 相关的信息,当 Android 设备作为 USB Gadget 时,显示控制器的状态和配置。
/sys/bus/usb
:- 主要管理 USB 总线下注册的设备和驱动程序:
/sys/bus/usb/devices
:列出所有连接的 USB 设备,每个子目录表示一个设备,包含设备描述符、配置、状态等信息。/sys/bus/usb/drivers
:包含当前注册的 USB 驱动程序,如usb-storage
、mtp
、cdc_acm
等。
- 主要管理 USB 总线下注册的设备和驱动程序:
/sys/kernel/debug/usb
:- 包含 USB 子系统的调试信息,需在调试模式下访问。提供 USB 传输日志、错误状态、端点信息等,便于开发人员进行问题分析。
/sys/devices/platform/soc/
:- 这个目录下的子目录(如
xxx.ssusb
,musb-hdrc
,dwc3
等)表示与 SoC 平台相关的 USB 控制器:- 包含 USB 主控制器的配置节点,如
dr_mode
(主机/设备模式)、power
(电源管理)、status
(当前状态)等。
- 包含 USB 主控制器的配置节点,如
- 这个目录下的子目录(如
/sys/devices/virtual/usb_composite
:- 主要用于 Android USB Composite 设备,显示 USB 配置相关的信息,包括各个 USB 功能的组合状态。
1. /sys/bus/usb 目录下的含义
1.1 /sys/bus/usb/devices/
usb1
usb1 表示该 SOC 上接了 1 条 USB 总线,即 1 个 USB Controller。
PS:如果有多个 USB Controller,将会是 usb1、usb2、usb3。。
1-0:1.0
而 1-0:1.0 表示什么呢?
- 1:表示 1 号总线,或者说 1 号 Root Hub
- 0:表示端口号
- 1:表示配置号
- 0:表示接口号
命名规则:Root Hub-port:configuration.interface
1-1.1:1.0
- 1:表示 1 号总线,或者说 1 号 Root Hub
- 1:表示 Hub 连在 Root Hub 上的端口号
- 1:表示设备连在 Hub 上的端口号
- 1:表示配置号
- 0:表示接口号
结构图
root@ATK-IMX6U:~# ls /sys/bus/usb/devices/
1-0:1.0 // root-hub:1,port:0,config:1,interface:0
–
1-1 // root-hub:1,hub:1
1-1:1.0 // root-hub:1,hub:1,port:1,config:1,interface:0
–
1-1.1 // root-hub:1,hub:1,port:1
1-1.1:1.0 // root-hub:1,hub:1,port:1,config:1,interface:0
1-1.1:1.1 // root-hub:1,hub:1,port:1,config:1,interface:1
–
1-1.3 // root-hub:1,hub:1,port:3
1-1.3:1.0 // root-hub:1,hub:1,port:3,config:1,interface:0
1-1.3:1.1 // root-hub:1,hub:1,port:3,config:1,interface:1
–
usb1
设备信息
在每个 USB 设备目录下都有一些参数来展示该设备的属性信息
root@ATK-IMX6U:~# ls /sys/bus/usb/devices/1-1/
1-1.1 avoid_reset_quirk bDeviceProtocol bMaxPower configuration devpath idVendor power remove urbnum
1-1:1.0 bcdDevice bDeviceSubClass bNumConfigurations descriptors driver ltm_capable product speed version
1-1.3 bConfigurationValue bmAttributes bNumInterfaces dev ep_00 maxchild quirks subsystem
authorized bDeviceClass bMaxPacketSize0 busnum devnum idProduct port removable uevent
bDeviceClass
表示设备种类
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1/bDeviceClass
09
09 表示该设备是一个 Hub,详细类型参考如下
/*
* Device and/or Interface Class codes
* as found in bDeviceClass or bInterfaceClass
* and defined by www.usb.org documents
*/
#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */
#define USB_CLASS_AUDIO 1
#define USB_CLASS_COMM 2
#define USB_CLASS_HID 3
#define USB_CLASS_PHYSICAL 5
#define USB_CLASS_STILL_IMAGE 6
#define USB_CLASS_PRINTER 7
#define USB_CLASS_MASS_STORAGE 8
#define USB_CLASS_HUB 9
#define USB_CLASS_CDC_DATA 0x0a
#define USB_CLASS_CSCID 0x0b /* chip+ smart card */
#define USB_CLASS_CONTENT_SEC 0x0d /* content security */
#define USB_CLASS_VIDEO 0x0e
#define USB_CLASS_WIRELESS_CONTROLLER 0xe0
#define USB_CLASS_MISC 0xef
#define USB_CLASS_APP_SPEC 0xfe
#define USB_CLASS_VENDOR_SPEC 0xff
一个 USB Device 的类型为 0
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/bDeviceClass // 鼠标
00
version
USB 协议版本
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1/version // USB2.0 的 Hub
2.00
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/version // USB2.0 的设备(鼠标)
2.00
busnum & devnum
总线号 & 设备号
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1/busnum
1
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/busnum
1
Hub 及其下挂的鼠标设备,总线号都是 1
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1/devnum
2
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/devnum
3
dev
主设备号:次设备号
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1/dev
189:1
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/dev
189:2
和 /dev/bus/usb/ 下设备一致
root@ATK-IMX6U:~# ls /dev/bus/usb/001/ -lh
total 0
crw-rw-r-- 1 root root 189, 0 Jun 5 10:08 001
crw-rw-r-- 1 root root 189, 1 Jun 5 10:08 002
crw-rw-r-- 1 root root 189, 2 Jun 5 10:08 003
crw-rw-r-- 1 root root 189, 3 Jun 5 10:08 004
bMaxPower
设备最大电流
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1/bMaxPower
100mA
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/bMaxPower
300mA
idVendor & idProduct
厂商 ID & 产品 ID
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1/idVendor
05e3
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1/idProduct
0608
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/idVendor
046d
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/idProduct
c084
这和 lsusb 显示一致
root@ATK-IMX6U:~# lsusb
Bus 001 Device 004: ID 258a:1006 // 键盘
Bus 001 Device 003: ID 046d:c084 // 鼠标
Bus 001 Device 002: ID 05e3:0608 // Hub
Bus 001 Device 001: ID 1d6b:0002
product
产品名称
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1/product // USB2.0 Hub
USB2.0 Hub
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/product // 罗技 G102 鼠标
G102 Prodigy Gaming Mouse
manufacturer
厂商
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/manufacturer
Logitech
bcdDevice
固件版本号
同一个产品,升级之后(比如固件修改,新增功能),可以通过修改固件版本号来进行区别。
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1/bcdDevice
8536
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/bcdDevice
0703
speed
速率
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1/speed
480
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/speed
12
uevent
sysfs usb 设备的 uevent 是一个事件通知机制,表示当该 usb 设备在系统上被插入或拔出时,内核会发送一个事件通知给用户空间的系统进程,告知设备的状态变化。这个事件通知会包含一些关于设备的属性信息,例如设的厂商ID、产品ID、序列号等等,方便用户空间的应用程序进行设备管理和配置。
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1/uevent
MAJOR=189 // 主设备号
MINOR=1 // 次设备号
DEVNAME=bus/usb/001/002 // bus usb 总线号001 设备号002,和 lsusb 显示一致
DEVTYPE=usb_device // USB 设备
DRIVER=usb // 设备使用的驱动程序
PRODUCT=5e3/608/8536 // 厂商ID/产品ID/固件版本号
TYPE=9/0/1
BUSNUM=001 // 总线号
DEVNUM=002 // 设备号
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/uevent
MAJOR=189
MINOR=2
DEVNAME=bus/usb/001/003
DEVTYPE=usb_device
DRIVER=usb
PRODUCT=46d/c084/703
TYPE=0/0/0
BUSNUM=001
DEVNUM=003
bmAttributes
大小为一字节,不同的位,表示不同的特性。
- bit7 是保留的,必须为1。
- bit6 表示供电方式:1 设备自供电;0 设备是总线供电的。
- bit5 表示是否支持远程唤醒:1 支持远程唤醒;0 不支持远程唤醒。
- bit0~4 是保留的,默认为0。
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1/bmAttributes // 1110 0000,设备自供电,支持远程唤醒
e0
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/bmAttributes // 1010 0000,设备是由总线供电的,支持远程唤醒
a0
drivers_autoprobe
drivers_autoprobe 是一个 sysfs 属性,用于在新插入 USB 设备时触发自动探测 USB 驱动程序。当将此属性设置为 1 时,内核将尝试自动加载适当的驱动程序,以便为任何新连接的 USB 设备进行配置。这可以节省手动 USB 设备所需的时间和精力。
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1/subsystem/drivers_autoprobe
1
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/subsystem/drivers_autoprobe
1
1.2 /sys/bus/usb/drivers/
1.2.1 /sys/bus/usb/drivers/lvs
常见节点的含义
1. **`bind`**:
- 该文件允许手动将一个USB设备绑定到当前驱动程序。你可以通过向这个文件写入设备的`bus`和`device`ID(例如`1-1`)来绑定设备。
2. **`unbind`**:
- 与`bind`相反,该文件用于手动将一个USB设备从当前驱动程序解除绑定。通过写入设备的`bus`和`device`ID,驱动程序将不再管理该设备。
3. **`new_id`**:
- 允许将新的设备ID添加到驱动程序支持的设备列表中。这对于设备ID未被驱动程序直接支持的设备,或进行测试时非常有用。可以通过向此文件写入设备的`Vendor`和`Product` ID 来实现。
4. **`remove_id`**:
- 用于从驱动程序支持的设备列表中移除一个设备ID。与`new_id`对应。
5. **`uevent`**:
- 用于手动触发内核的`uevent`,通常用于调试或通知用户空间有设备状态变化。
6. **`autosuspend`**:
- 与驱动程序的自动挂起(autosuspend)功能相关的设置节点。它允许设备在一段时间无活动后进入低功耗模式。
7. **设备符号链接**(如 `1-1`, `2-2`, 等):
- 这些符号链接指向被驱动程序管理的实际USB设备的sysfs路径。每个符号链接表示一个由 `lvs` 驱动程序管理的具体设备。
8. **enable_compliance**
- `enable_compliance` 节点可能用于将 USB 设备置于合规性测试模式。这种模式用于验证设备是否符合 USB 规范,包括信号质量、协议处理等方面的测试。
写入 `1`:启用合规性模式。
写入 `0`:禁用合规性模式。
1.2.2 /sys/bus/usb/drivers/usb-storage
该目录包含与 usb-storage
驱动程序相关的信息和操作接口。usb-storage
驱动程序是用于管理 USB 接口的存储设备的核心驱动,如 U 盘、外部硬盘、SD 卡读卡器等。以下是该目录的内容及其含义:
bind
:- 用于将未绑定到任何驱动程序的 USB 设备手动绑定到
usb-storage
驱动程序。你可以通过向这个文件写入设备的bus-port
ID(例如1-1
)来绑定设备。
- 用于将未绑定到任何驱动程序的 USB 设备手动绑定到
unbind
:- 用于将已绑定到
usb-storage
驱动程序的设备手动解除绑定。写入设备的bus-port
ID 即可解除绑定。
- 用于将已绑定到
new_id
:- 允许将新的设备 ID(Vendor ID 和 Product ID)添加到
usb-storage
驱动程序支持的设备列表中,这对于在驱动未直接支持的设备上进行测试非常有用。
- 允许将新的设备 ID(Vendor ID 和 Product ID)添加到
remove_id
:- 从
usb-storage
驱动程序支持的设备列表中移除一个设备 ID,与new_id
功能相反。
- 从
- 设备符号链接(例如
1-1
,2-3
, 等):- 每个符号链接指向一个由
usb-storage
驱动管理的实际 USB 存储设备的 sysfs 路径。通过这些链接可以访问设备的详细信息和状态。
- 每个符号链接指向一个由
1.2.3 /sys/bus/usb/drivers/hid-generic
该目录包含了与 hid-generic
驱动相关的节点和接口,允许对 HID 设备进行手动管理和调试。以下是该目录的主要内容及其含义:
bind
:- 用于手动将 USB 设备绑定到
hid-generic
驱动。要绑定一个设备,向这个文件写入设备的标识符(如1-1:1.0
),其中1-1
是总线和端口号,1.0
是设备的接口编号。
- 用于手动将 USB 设备绑定到
unbind
:- 用于手动将已绑定到
hid-generic
驱动的设备解绑。向该文件写入设备的标识符即可解除绑定。这对于调试特定设备或驱动程序时特别有用。
- 用于手动将已绑定到
new_id
:- 允许将新的设备 ID(如 Vendor ID 和 Product ID)添加到
hid-generic
驱动程序的支持列表中,使驱动可以支持那些未被默认识别的设备。
- 允许将新的设备 ID(如 Vendor ID 和 Product ID)添加到
remove_id
:- 用于从
hid-generic
驱动程序的支持列表中移除设备 ID,与new_id
功能相反,通常用于测试过程中调整驱动的兼容性。
- 用于从
- 符号链接(例如
1-1:1.0
、2-3:1.1
等):- 这些符号链接指向由
hid-generic
驱动管理的具体 HID 设备的 sysfs 路径。每个链接代表一个设备接口,通过这些链接可以访问到具体设备的详细信息。
- 这些符号链接指向由
1.3 drivers_autoprobe:
- 该文件用于控制是否自动探测和绑定驱动程序到设备。写入
1
启用自动探测,写入0
禁用。
1.4 drivers_probe
:
- 触发对当前未绑定驱动程序的设备进行驱动程序探测和绑定。
1.5 uevent
:
- 用于发送
uevent
事件,通知用户空间有关设备的状态变化。
2. /sys/devices/platform/soc/(USB 控制器等)
/sys/devices/platform/soc/:
这个目录下的子目录(如 xxx.ssusb,musb-hdrc,dwc3 等)表示与 SoC 平台相关的 USB 控制器:
- 包含 USB 主控制器的配置节点,如 dr_mode(主机/设备模式)、power(电源管理)、status(当前状态)等。
2.1 /sys/devices/platform/soc/xxx.ssusb
常见节点和目录的含义
dr_mode
:- 表示当前 USB 控制器的工作模式,可以是
host
(主机模式)、device
(设备模式)或otg
(On-The-Go 模式,支持主机与设备角色动态切换)。
- 表示当前 USB 控制器的工作模式,可以是
power
:- 包含电源管理相关的设置,如自动挂起、唤醒等功能。常见子节点包括:
control
:可以设置设备电源状态,如on
或auto
。runtime_status
:显示当前的电源状态,如active
、suspended
。wakeup
:配置设备是否支持唤醒主机。
- 包含电源管理相关的设置,如自动挂起、唤醒等功能。常见子节点包括:
role
:- 当前 USB 控制器的角色状态,与
dr_mode
类似,可以动态查看或设置为host
、device
或otg
。
- 当前 USB 控制器的角色状态,与
usbX
(例如usb1
,usb2
等):- 这些子目录表示实际的 USB 端口实例,每个
usbX
目录对应一个 USB 端口。它们包含与该端口相关的设备和状态信息。
- 这些子目录表示实际的 USB 端口实例,每个
phy
或usb_phy
:- 表示与 USB PHY(物理层接口)相关的设置目录,包含 USB 的物理层配置和状态信息,影响信号传输和设备检测等底层操作。
ulpi
:- 包含与 ULPI(UTMI+ Low Pin Interface)相关的配置信息,通常用于低级别 USB PHY 接口设置。
mode
:- 显示或设置 USB 控制器的操作模式,可能和
dr_mode
类似但可能更专用于某些特定硬件配置。
- 显示或设置 USB 控制器的操作模式,可能和
status
:- 用于查看当前 USB 控制器的状态,如是否已启用、正在传输数据或待机等。
vbus
:- 管理 VBUS 电源控制的节点,用于显示或设置 USB 端口的 VBUS 电源状态。
debug
:- 包含用于调试和开发的额外配置选项,可能包括错误日志、调试开关等内容。
2.2 /sys/devices/platform/soc/dwc3
/sys/devices/platform/soc/dwc3
目录是与 Linux 系统中的 DesignWare USB 3.0 控制器(简称 DWC3)相关的 sysfs 接口。DWC3 是一种常见的 USB 控制器 IP,广泛用于支持 USB 3.0/3.1 功能的 SoC(System on Chip)中。该目录用于访问和管理 DWC3 控制器的硬件属性及状态。
目录内容含义
- 设备节点:
dwc3
目录下的设备节点对应于 SoC 中的 DWC3 控制器实例。通常命名为类似dwc3.0.auto
或其他特定于硬件的名称。 - 常见属性和文件:
power
:与电源管理相关的文件,用于设置和获取设备的电源状态。subsystem
:指向该设备所属的子系统,通常为 USB。uevent
:包含设备的 UEvent 信息,用于用户空间进程监听设备的状态变化。modalias
:显示设备的模块别名,供内核模块自动加载使用。
- 特定属性:
usb_role_switch
:控制 USB 角色切换,设置设备为主机(Host)模式或设备(Device)模式。dr_mode
:显示和设置设备的模式(例如host
、device
、otg
),表示控制器当前的工作模式。link_state
:显示 DWC3 控制器的链路状态,例如SS.Inactive
(SuperSpeed Inactive)等。lpm_capable
:指示控制器是否支持低功耗模式(LPM)。
3. /sys/kernel/debug/usb(调试节点)
3.1 /sys/kernel/debug/usb/devices
关键字段:
T:
(Topology):显示设备的拓扑结构,包括设备地址、端口号、速度(如 High-Speed、SuperSpeed)等。B:
(Bus):显示设备所属的总线编号和设备编号。D:
(Device):显示设备描述符的信息,如设备的 ID、类、子类、协议等。P:
(Product):显示设备的产品和厂商信息,如 VID (Vendor ID) 和 PID (Product ID)。S:
(String):显示设备的字符串描述符,包括制造商、产品名称、序列号等。C:
(Configuration):描述设备的配置,包括最大电流、配置编号等。I:
(Interface):显示每个接口的描述符信息,接口编号、类、子类、协议等。E:
(Endpoint):描述每个端点的详细信息,包括端点地址、属性、最大包大小、轮询间隔等。
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0781 ProdID=558a Rev= 1.00
S: Manufacturer=SanDisk
S: Product=Ultra
S: SerialNumber=4C530001230914112073
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=200mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=125us
3.2 /sys/kernel/debug/usb/host/
常见文件及含义:
regs
:显示主控制器的寄存器内容。这些寄存器提供了控制器内部状态的信息,是调试控制器硬件问题的重要数据。qtds
、qtds_dma
:描述控制器传输描述符(Transfer Descriptors)和传输队列。用于查看 USB 数据包的详细传输过程,帮助分析传输性能问题。qh
、qh_dma
:显示队列头(Queue Head)信息,特别在 EHCI 和 OHCI 控制器中重要,查看控制器如何管理 USB 传输队列。urb
:显示当前正在处理的 USB 请求块(URB),用于监控正在执行的 USB 事务,分析传输延迟或失败的原因。port
:列出控制器的端口状态,例如端口是否启用、连接速度、连接的设备类型等。
cat /sys/kernel/debug/usb/host/xhci_hcd/regs
在 xhci_hcd
(USB 3.0 控制器)下的 regs
文件可能包含以下寄存器内容:
xHC version 1.10
Registers:
USBCMD: 0x00101000
USBSTS: 0x00000001
...
3.3 /sys/kernel/debug/usb/usbmon
主要文件:
0u
,1u
,2u
, ...:这些文件是监控接口,通过读取这些文件,可以捕获指定 USB 总线上的数据包流。- 访问方式:使用
cat
,tcpdump
, 或Wireshark
等工具读取这些文件,进行实时 USB 数据包捕获和分析。
ffff8801b0b0d800 3690053056 S Bi:1:001:1 -115 31 <
ffff8801b0b0d800 3690053096 C Bi:1:001:1 0 31 = 12345678abcdef
ffff8801b0b0d800 3690054012 S Ci:1:001:0 s 80 06 0300 0000 00ff 255 <
3.4 /sys/kernel/debug/usb/gadget/
常见文件及含义:
gadget/udc
:包含当前所有已注册的 USB Device Controller (UDC) 信息,这些控制器用于 USB 从设备模式。显示控制器的状态,比如是否已配置。gadget/ep0
:表示 USB 控制端点 0 的状态和数据传输情况。端点 0 是用于控制传输的特殊端点,处理设备请求。gadget/configs
:列出当前的配置描述符信息,显示设备配置、接口和端点的详细状态。gadget/strings
:显示设备的字符串描述符,例如制造商、产品名称、序列号等信息。gadget/function/
:包含各类 Gadget 功能的状态,比如网络接口(RNDIS)、存储设备(Mass Storage)等。gadget/eps
:列出所有可用端点的状态及其配置情况
查看控制器信息可能会显示如下:
cat /sys/kernel/debug/usb/gadget/udc
UDC: dwc3-gadget
state: configured
speed: high-speed
address: 1
查看端点 0 状态:
ep0 state: idle
ep0 requests: 12
3.5 /sys/kernel/debug/usb/hcd
常见文件及其含义:
regs
:显示主控制器的寄存器内容。寄存器提供了控制器硬件的内部状态信息,是调试硬件问题的关键数据。port
:列出主控制器端口的状态信息,包括端口是否启用、设备连接状态、速度、端口电源状态等。urb
:显示当前正在处理的 USB 请求块(URB,USB Request Block),用于监控控制器正在处理的事务。qh
(Queue Head):显示传输队列头的状态,帮助了解控制器是如何管理和调度 USB 传输的。qtds
(Queue Transfer Descriptors):描述传输描述符的内容,展示 USB 数据传输的详细过程和状态。
4. /sys/class下USB 目录含义
4.1 /sys/class/usb_gadget
/sys/class/usb_gadget
目录包含一个或多个虚拟 USB 设备控制器(USB Gadget)的实例,这些实例用于配置 USB 从设备的各种属性,如设备描述符、配置、功能等。以下是该目录下常见的内容及其含义:
g1
(或其他 Gadget 实例):g1
是一个 USB Gadget 实例的常见名称(可以是g2
,g3
,根据配置不同可能有多个实例)。它表示一个具体的 USB 设备实例,其中包含子节点用于配置 USB 从设备的各种属性。
g1
目录下的主要节点
-
idVendor
和idProduct
:idVendor
:设置设备的供应商 ID(Vendor ID),用于标识设备的制造商,例如0x18D1
代表 Google。idProduct
:设置设备的产品 ID(Product ID),用于标识具体产品类型。
-
bcdDevice
:- 设置设备版本号,通常表示固件版本。
-
bcdUSB
:- 设置 USB 设备支持的 USB 版本,例如
0x0200
表示 USB 2.0。
- 设置 USB 设备支持的 USB 版本,例如
-
strings/0xLANGID
:-
包含描述符字符串(如制造商、产品名称、序列号)的目录,
0xLANGID
表示语言 ID,例如
0x409
表示美国英语。常见文件包括:
manufacturer
:制造商名称。product
:产品名称。serialnumber
:设备的序列号。
-
-
configs/c.1
:- 定义一个 USB 配置,可以有多个配置。每个配置包含若干功能(functions)。
MaxPower
:配置的最大电力消耗(以 2mA 为单位)。bmAttributes
:配置属性,如是否自供电。
-
configs/c.1/strings/0xLANGID
:- 用于描述配置的字符串,与
strings/0xLANGID
类似,用于具体配置。
- 用于描述配置的字符串,与
-
functions
:- 该目录下包含 USB 功能的实例,如
acm.usb0
(串口设备)、ecm.usb0
(以太网设备)、mass_storage.0
(存储设备)等。功能实例可以链接到某个配置,使设备具备相应功能。
- 该目录下包含 USB 功能的实例,如
-
UDC
:- 指定 USB Device Controller(UDC)名称,用于激活 USB Gadget 实例。当设置此节点时,设备开始与主机通信。
-
os_desc
:- 设置与 Microsoft 操作系统描述符(OS Descriptors)相关的节点,便于 Windows 主机识别并加载特定功能驱动。
(同/config/usb_gadget/)
/config/usb_gadget/xx:
以g1为例:
g1
通常代表一个具体的USB Gadget实例(设备配置),这是在创建USB设备时常见的命名方式。以下是g1
及其相关节点的具体含义:1. **`g1/idVendor` 和 `g1/idProduct`**: - 用于定义USB设备的供应商ID和产品ID,标识设备的制造商和类型。 2. **`g1/bcdDevice`**: - 指定设备版本号,通常用于标识设备的固件版本。 3. **`g1/bcdUSB`**: - USB协议版本号,例如2.0、3.0,指定设备支持的USB协议版本。 4. **`g1/strings/0xLANGID`**: - 包含设备的字符串描述符,如制造商名称、产品名称、序列号等。`0xLANGID` 指定语言ID。 5. **`g1/configs/c.1`**: - 表示一个配置(Configuration),包含接口和功能。可以有多个配置,每个配置定义设备在不同情况下的行为。 - **`g1/configs/c.1/MaxPower`**:设置该配置的最大电力消耗。 - **`g1/configs/c.1/bmAttributes`**:设置配置的属性,如是否自供电等。 6. **`g1/functions`**: - 列出设备的所有功能实例,例如 `acm.usb0`(串口)、`ecm.usb0`(以太网)、`mass_storage`(存储设备)等。 - 这些功能通过符号链接(symlink)添加到某个配置目录下,使功能在配置中生效。 7. **`g1/UDC`**: - 指定将该USB设备配置应用到哪个USB Device Controller(UDC)。通过设置该节点,设备被激活并开始与主机通信。 8. **`g1/os_desc`**: - 包含与Windows兼容的操作系统描述符信息,用于特殊功能的识别和兼容性处理。
4.2 /sys/class/udc
/sys/class/udc
目录是 Linux 系统中与 USB Device Controller (UDC) 相关的 sysfs 接口。这个目录下的内容用于管理和控制 UDC,这是一个用于将设备配置为 USB 从设备(也称为 USB Gadget)的控制器。
目录内容含义
-
设备节点:目录下的每个节点代表系统中的一个 USB 设备控制器。节点的名字通常是与硬件相关的,比如
dwc3.0.auto
、ci_hdrc.0
等,表示不同类型的 USB 控制器。 -
属性文件:每个 UDC 设备节点下有一些属性文件,用于表示该控制器的状态、配置等关键信息。常见的属性文件包括:
state
:表示 UDC 的当前状态,比如configured
、connected
、disconnected
等。usb_device
:指向当前绑定的 USB 设备的链接。soft_connect
:用于控制 UDC 是否与主机连接,写入1
可以强制连接,写入0
则断开连接。
-
用途:这些属性文件可以用来检查 USB Gadget 的状态、手动控制 UDC 的连接状态、调试 USB 从设备的行为等。
该目录是实现 USB Gadget 框架的重要部分,通常与配置 USB 从设备的功能有关,比如 MTP、ADB 等。
4.3 /sys/class/typec(TYPEC相关节点)
在Linux系统中,/sys/class/typec
目录下的节点用于表示和管理USB Type-C端口的状态和配置。这些节点为用户和开发人员提供了关于USB Type-C接口的详细信息,并允许某些配置和控制操作。以下是常见节点的含义:
1. **portX**(例如`port0`,`port1`等):
- 每个`portX`目录表示一个USB Type-C端口。通过进入这些目录,可以查看该端口的具体信息。
2. **portX/role**:
- 表示USB Type-C端口当前的角色,可以是“source”(电源源)、“sink”(电源接收方)、或“dual”(可以作为source或sink)。有些系统可能允许你动态切换角色。
3. **portX/data_role**:
- 表示数据角色,可以是“host”或“device”。“host”表示该设备作为USB主机,而“device”表示作为USB从设备。
4. **portX/power_role**:
- 表示电力角色,可以是“source”(提供电力)或“sink”(接收电力)。
5. **portX/vconn_role**:
- 表示Vconn的角色,Vconn是用于供电给线缆内电子标记的。可以是“source”或“sink”。
6. **portX/status**:
- 显示当前端口的连接状态、当前角色、Vbus电源状态等信息。
7. **portX/partner**:
- 如果端口连接了一个USB Type-C设备,此目录将存在。`partner`目录中会有进一步的信息,如支持的模式、属性等。
8. **portX/cable**:
- 如果连接了带电子标记的USB Type-C线缆,此目录将存在。可以查看线缆的详细信息。
9. **portX/alternate_mode**:
- 表示当前USB Type-C端口支持的备用模式(Alternate Modes),如DisplayPort模式。进入该目录可以查看详细的模式信息。
这些节点提供的功能和信息因硬件和驱动程序的不同而有所变化。有些系统可能还包括其他特定于硬件的节点。
5. /sys/kernel/config下面路径USB相关
在 Linux 系统中,/sys/kernel/config/
路径下与 USB 相关的目录通常包含以下几种,与配置 USB 设备、驱动和子系统有关:
-
/sys/kernel/config/usb_gadget/
:- 用于配置 USB gadget 设备,该目录允许用户动态创建 USB 设备及其功能模块。
- 典型子目录包括:
strings/
: 配置 USB 描述符字符串。configs/
: 配置 USB gadget 配置。functions/
: 配置各种 USB 功能模块(如rndis
、mass_storage
、adb
等)。
-
/sys/kernel/config/usb_mux/
:- 用于配置 USB Mux(多路复用器),控制 USB 数据路径的切换。
- 可能用于一些特定硬件场景或开发板中,以在多个 USB 数据路径间切换。
-
/sys/kernel/config/usb_gadget/udc/
:- 用于管理 USB Device Controller (UDC) 驱动程序。
- 通过这里可以激活或停用特定的 USB gadget 设备。
-
/sys/kernel/config/usb_f_
(仅部分系统可见):- 包含特定 USB 功能的配置文件夹,例如 USB Audio、ECM (Ethernet Control Model) 等功能模块的配置。
这些路径在系统内核启用相应的功能时才会出现,主要用于嵌入式系统或需要 USB gadget 功能的场合。是否需要深入了解某个路径或具体配置方法?