在 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
usb1 表示该 SOC 上接了 1 条 USB 总线,即 1 个 USB Controller。
PS:如果有多个 USB Controller,将会是 usb1、usb2、usb3。。。
而 1-0:1.0 表示什么呢?
命名规则:Root Hub-port:configuration.interface
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
表示设备种类
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
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
总线号 & 设备号
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
Hub 的设备号为 2,鼠标的设备号为 3
主设备号:次设备号
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
设备最大电流
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
厂商 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
产品名称
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
厂商
root@ATK-IMX6U:~# cat /sys/bus/usb/devices/1-1.1/manufacturer
Logitech
固件版本号
同一个产品,升级之后(比如固件修改,新增功能),可以通过修改固件版本号来进行区别。
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
速率
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
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
大小为一字节,不同的位,表示不同的特性。
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 是一个 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