USB相关的sysfs文件

news/2024/10/6 4:05:38

前言

在 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

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 的 Hub2.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
0608root@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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/54693.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

KubeSphere 社区双周报| 2024.08.16-08.29

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2024.08.16-08.29。 贡献者名单新晋 KubeSphere co…

t6s框架-接口测试Tlink-1-接口管理模块

需求概览 重点1:引入在线脚本编辑,类似js的脚本语言,上手很容易,参考例子就会了,语法也比较宽松,拿来即用 重点2:协议模块,java能实现的协议,都可以封装后,在线脚本引用模块,开始测试接口 重点2:请求参数具象化,枚举名称描述参数值含义,不在是直接与编码“123”来…

Java Script网页设计案例04A6PZbSPCHdMhmS

1. JavaScript网页设计案例 下面我将提供一个简单的JavaScript网页设计案例,该案例将实现一个动态的待办事项列表(Todo List)。用户可以在页面上添加新的待办事项,标记它们为已完成,以及删除它们。这个案例将使用HTML来构建页面结构,CSS来美化页面,以及JavaScript来添加…

[WPF]数据绑定时为何会出现StringFormat失效VPqCe7cCvg7iTH0g

在数据绑定过程中,我们经常会使用StringFormat对要显示的数据进行格式化,以便获得更为直观的展示效果,但在某些情况下格式化操作并未生效,例如 Button的 Content属性以及ToolTip属性绑定数据进行StringFormat时是无效的。首先回顾一下StringFormat的基本用法。 StringForma…

容器 数据库 遛个弯

情境 参加了培训的第三次课, 本周内容的覆盖面有点广, 主要涉及docker概览, dvwa容器部署实验, 数据库CRUD, 以及某b**p软件的安装. 这里是第3课的作业题, 及我的解答.1、在docker中分别以后台方式和交互方式启动centos,对比启动后的容器状态,实现退出容器也能保持其运行状态…

nmap 主动探活

nmap 主动探活 当使用nmap探测主机时候,nmap会先发起主机活动测试,然后在执行相应的端口探测: 以下在 nmap 7.95 windows 和 nmap 7.8 debian测试 #仅使用-p8000测试,nmap会先执行主动探活然后再执行端口测试 nmap -p8000 110.242.68.4由上抓包可见,主动探测包括,ping(i…

一次失败的实验 - 无限注意力,我们为什么坚持实验

总结: 随着我们增加内存压缩次数的次数,Infini-attention 的性能会变得越来越差。据我们所知,ring attention、YaRN 和 rope scaling 这三种方法仍是将预训练模型拓展更长上下文的最佳方式。 引言: 语言模型的上下文长度也是除模型性能之外的重要属性之一。自 in-context lea…