Fork me on GitHub

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 相关目录及其含义

  1. /sys/class/usb_device
    • 包含所有已注册的 USB 设备的符号链接,这些链接指向实际的设备路径,允许访问设备的详细信息。
  2. /sys/class/usb_gadget
    • 与 USB Gadget 子系统相关的节点,用于配置 Android 作为 USB 设备时的各项属性(如 Vendor ID、Product ID、功能等)。适用于当 Android 设备作为 USB 从设备(Device Mode)时的配置管理。
  3. /sys/class/typec
    • 包含 Type-C 端口的状态和配置信息,尤其是当设备支持 USB Type-C 时,提供关于端口角色、数据传输模式等信息。
  4. /sys/class/udc
    • 包含 USB Device Controller (UDC) 相关的信息,当 Android 设备作为 USB Gadget 时,显示控制器的状态和配置。
  5. /sys/bus/usb
    • 主要管理 USB 总线下注册的设备和驱动程序:
      • /sys/bus/usb/devices:列出所有连接的 USB 设备,每个子目录表示一个设备,包含设备描述符、配置、状态等信息。
      • /sys/bus/usb/drivers:包含当前注册的 USB 驱动程序,如 usb-storagemtpcdc_acm 等。
  6. /sys/kernel/debug/usb
    • 包含 USB 子系统的调试信息,需在调试模式下访问。提供 USB 传输日志、错误状态、端点信息等,便于开发人员进行问题分析。
  7. /sys/devices/platform/soc/
    • 这个目录下的子目录(如 xxx.ssusbmusb-hdrcdwc3 等)表示与 SoC 平台相关的 USB 控制器:
      • 包含 USB 主控制器的配置节点,如 dr_mode(主机/设备模式)、power(电源管理)、status(当前状态)等。
  8. /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 卡读卡器等。以下是该目录的内容及其含义:

  1. bind:
    • 用于将未绑定到任何驱动程序的 USB 设备手动绑定到 usb-storage 驱动程序。你可以通过向这个文件写入设备的 bus-port ID(例如 1-1)来绑定设备。
  2. unbind:
    • 用于将已绑定到 usb-storage 驱动程序的设备手动解除绑定。写入设备的 bus-port ID 即可解除绑定。
  3. new_id:
    • 允许将新的设备 ID(Vendor ID 和 Product ID)添加到 usb-storage 驱动程序支持的设备列表中,这对于在驱动未直接支持的设备上进行测试非常有用。
  4. remove_id:
    • usb-storage 驱动程序支持的设备列表中移除一个设备 ID,与 new_id 功能相反。
  5. 设备符号链接(例如 1-1, 2-3, 等):
    • 每个符号链接指向一个由 usb-storage 驱动管理的实际 USB 存储设备的 sysfs 路径。通过这些链接可以访问设备的详细信息和状态。

1.2.3 /sys/bus/usb/drivers/hid-generic

该目录包含了与 hid-generic 驱动相关的节点和接口,允许对 HID 设备进行手动管理和调试。以下是该目录的主要内容及其含义:

  1. bind:
    • 用于手动将 USB 设备绑定到 hid-generic 驱动。要绑定一个设备,向这个文件写入设备的标识符(如 1-1:1.0),其中 1-1 是总线和端口号,1.0 是设备的接口编号。
  2. unbind:
    • 用于手动将已绑定到 hid-generic 驱动的设备解绑。向该文件写入设备的标识符即可解除绑定。这对于调试特定设备或驱动程序时特别有用。
  3. new_id:
    • 允许将新的设备 ID(如 Vendor ID 和 Product ID)添加到 hid-generic 驱动程序的支持列表中,使驱动可以支持那些未被默认识别的设备。
  4. remove_id:
    • 用于从 hid-generic 驱动程序的支持列表中移除设备 ID,与 new_id 功能相反,通常用于测试过程中调整驱动的兼容性。
  5. 符号链接(例如 1-1:1.02-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

常见节点和目录的含义

  1. dr_mode:
    • 表示当前 USB 控制器的工作模式,可以是 host(主机模式)、device(设备模式)或 otg(On-The-Go 模式,支持主机与设备角色动态切换)。
  2. power:
    • 包含电源管理相关的设置,如自动挂起、唤醒等功能。常见子节点包括:
      • control:可以设置设备电源状态,如 onauto
      • runtime_status:显示当前的电源状态,如 activesuspended
      • wakeup:配置设备是否支持唤醒主机。
  3. role:
    • 当前 USB 控制器的角色状态,与 dr_mode 类似,可以动态查看或设置为 hostdeviceotg
  4. usbX(例如 usb1, usb2 等):
    • 这些子目录表示实际的 USB 端口实例,每个 usbX 目录对应一个 USB 端口。它们包含与该端口相关的设备和状态信息。
  5. phyusb_phy:
    • 表示与 USB PHY(物理层接口)相关的设置目录,包含 USB 的物理层配置和状态信息,影响信号传输和设备检测等底层操作。
  6. ulpi:
    • 包含与 ULPI(UTMI+ Low Pin Interface)相关的配置信息,通常用于低级别 USB PHY 接口设置。
  7. mode:
    • 显示或设置 USB 控制器的操作模式,可能和 dr_mode 类似但可能更专用于某些特定硬件配置。
  8. status:
    • 用于查看当前 USB 控制器的状态,如是否已启用、正在传输数据或待机等。
  9. vbus:
    • 管理 VBUS 电源控制的节点,用于显示或设置 USB 端口的 VBUS 电源状态。
  10. 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 控制器的硬件属性及状态。

目录内容含义

  1. 设备节点dwc3 目录下的设备节点对应于 SoC 中的 DWC3 控制器实例。通常命名为类似 dwc3.0.auto 或其他特定于硬件的名称。
  2. 常见属性和文件
    • power:与电源管理相关的文件,用于设置和获取设备的电源状态。
    • subsystem:指向该设备所属的子系统,通常为 USB。
    • uevent:包含设备的 UEvent 信息,用于用户空间进程监听设备的状态变化。
    • modalias:显示设备的模块别名,供内核模块自动加载使用。
  3. 特定属性
    • usb_role_switch:控制 USB 角色切换,设置设备为主机(Host)模式或设备(Device)模式。
    • dr_mode:显示和设置设备的模式(例如 hostdeviceotg),表示控制器当前的工作模式。
    • 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:显示主控制器的寄存器内容。这些寄存器提供了控制器内部状态的信息,是调试控制器硬件问题的重要数据。
  • qtdsqtds_dma:描述控制器传输描述符(Transfer Descriptors)和传输队列。用于查看 USB 数据包的详细传输过程,帮助分析传输性能问题。
  • qhqh_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 从设备的各种属性,如设备描述符、配置、功能等。以下是该目录下常见的内容及其含义:

  1. g1(或其他 Gadget 实例):
    • g1 是一个 USB Gadget 实例的常见名称(可以是 g2, g3,根据配置不同可能有多个实例)。它表示一个具体的 USB 设备实例,其中包含子节点用于配置 USB 从设备的各种属性。

g1 目录下的主要节点

  1. idVendoridProduct:

    • idVendor:设置设备的供应商 ID(Vendor ID),用于标识设备的制造商,例如 0x18D1 代表 Google。
    • idProduct:设置设备的产品 ID(Product ID),用于标识具体产品类型。
  2. bcdDevice:

    • 设置设备版本号,通常表示固件版本。
  3. bcdUSB:

    • 设置 USB 设备支持的 USB 版本,例如 0x0200 表示 USB 2.0。
  4. strings/0xLANGID:

    • 包含描述符字符串(如制造商、产品名称、序列号)的目录,

      0xLANGID
      

      表示语言 ID,例如

      0x409
      

      表示美国英语。常见文件包括:

      • manufacturer:制造商名称。
      • product:产品名称。
      • serialnumber:设备的序列号。
  5. configs/c.1:

    • 定义一个 USB 配置,可以有多个配置。每个配置包含若干功能(functions)。
    • MaxPower:配置的最大电力消耗(以 2mA 为单位)。
    • bmAttributes:配置属性,如是否自供电。
  6. configs/c.1/strings/0xLANGID:

    • 用于描述配置的字符串,与 strings/0xLANGID 类似,用于具体配置。
  7. functions:

    • 该目录下包含 USB 功能的实例,如 acm.usb0(串口设备)、ecm.usb0(以太网设备)、mass_storage.0(存储设备)等。功能实例可以链接到某个配置,使设备具备相应功能。
  8. UDC:

    • 指定 USB Device Controller(UDC)名称,用于激活 USB Gadget 实例。当设置此节点时,设备开始与主机通信。
  9. 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.autoci_hdrc.0 等,表示不同类型的 USB 控制器。

  • 属性文件:每个 UDC 设备节点下有一些属性文件,用于表示该控制器的状态、配置等关键信息。常见的属性文件包括:

    • state:表示 UDC 的当前状态,比如 configuredconnecteddisconnected 等。
    • 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 设备、驱动和子系统有关:

  1. /sys/kernel/config/usb_gadget/:

    • 用于配置 USB gadget 设备,该目录允许用户动态创建 USB 设备及其功能模块。
    • 典型子目录包括:
      • strings/: 配置 USB 描述符字符串。
      • configs/: 配置 USB gadget 配置。
      • functions/: 配置各种 USB 功能模块(如 rndismass_storageadb 等)。
  2. /sys/kernel/config/usb_mux/:

    • 用于配置 USB Mux(多路复用器),控制 USB 数据路径的切换。
    • 可能用于一些特定硬件场景或开发板中,以在多个 USB 数据路径间切换。
  3. /sys/kernel/config/usb_gadget/udc/:

    • 用于管理 USB Device Controller (UDC) 驱动程序。
    • 通过这里可以激活或停用特定的 USB gadget 设备。
  4. /sys/kernel/config/usb_f_ (仅部分系统可见):

    • 包含特定 USB 功能的配置文件夹,例如 USB Audio、ECM (Ethernet Control Model) 等功能模块的配置。

这些路径在系统内核启用相应的功能时才会出现,主要用于嵌入式系统或需要 USB gadget 功能的场合。是否需要深入了解某个路径或具体配置方法?

posted @ 2024-08-30 16:00  yooooooo  阅读(22)  评论(0编辑  收藏  举报