`/sys/bus/usb/devices/` 中文件夹的命名约定

smw*_*dia 7 usb device-mapper lsusb

我试图理解 中的 Linux 文件夹名称/sys/bus/usb/devices/lsusb -t.

在我的机器上,lsusb显示如下:

在此输入图像描述

/sys/bus/usb/devices/,有:

在此输入图像描述

这些文件夹的命名约定是什么?

我唯一10能找到的lsusb是端口号。

我唯一1,2,3,4能找到的是If,即接口。

所以我想文件夹名称应该是这样的:

<bus>-<port>: <???>.<Interface>
Run Code Online (Sandbox Code Playgroud)

那是什么???部分?似乎总是如此1。为什么文件夹名称中没有设备编号?

操作系统信息:

Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:        20.04
Codename:       focal
Run Code Online (Sandbox Code Playgroud)

Linux 内核:

Linux 5.13.0-27-generic
Run Code Online (Sandbox Code Playgroud)

use*_*686 7

根据提示Documentation/ABI/stable/sysfs-bus-usb,一般格式为:

\n
<bus>-<port[.port[.port]]>:<config>.<interface>\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • 每个都<busnum>对应一个根集线器。

    \n
  • \n
  • 其后是一系列由点分隔的集线器端口号。即使您没有任何外部集线器,通常也会有内部集线器。使用该工具可以更详细地查看拓扑(该脚本与 lsusb 本身来自相同的“usbutils”)。lsusb.py

    \n
  • \n
  • 后面的数字:显示该设备的活动配置。某些设备可以在多种配置之间切换(一次仅一种活动),每种配置提供不同的接口 \xe2\x80\x93 例如,4G/LTE 调制解调器可以设置为“AT 模式”或“MBIM 模式”或“QMI 模式” ”。(在 Windows 上,这是由驱动程序处理的,在 Linux 上,可以通过 /sys 手动完成。)

    \n
  • \n
  • 最后,后面的数字.显示接口编号。USB设备可以提供多个接口,例如4G调制解调器将具有串行端口+虚拟以太网接口,而YubiKey NEO将具有用于U2F的HID设备+用于传统Yubikey OTP的假键盘。跑过去lsusb.py -i看看他们的名字。

    \n
  • \n
\n

桌面示例,您可以看到出于某种原因具有两个 HID 接口的键盘(对于精美的“游戏”键盘来说更为常见):

\n
# lsusb.py -I\nusb1              1d6b:0002 09 1IF  [USB 2.00,   480 Mbps,   0mA] (ehci_hcd 0000:00:1a.0) hub\n  1-0:1.0           (IF) 09:00:00 1EP  (Hub::Full speed (or root) hub) hub\n  1-1               8087:0024 09 1IF  [USB 2.00,   480 Mbps,   0mA] (Intel Corp. Integrated Rate Matching Hub) hub\n    1-1.1             1ea7:0064 00 1IF  [USB 1.10,    12 Mbps, 100mA] (Wireless rechargeable vertical mouse)\n      1-1.1:1.0         (IF) 03:01:02 1EP  (Mouse) usbhid hidraw1 (hid-generic) input7 input6 (hid-generic)\n    1-1.3             0951:1643 00 1IF  [USB 2.00,   480 Mbps, 100mA] (Kingston DataTraveler G3)\n      1-1.3:1.0         (IF) 08:06:50 2EPs (Bulk-Only) usb-storage host6 (sdd)\n    1-1.6             413c:2113 00 2IFs [USB 1.10,   1.5 Mbps, 100mA] (Dell Computer Corp. KB216 Wired Keyboard)\n      1-1.6:1.0         (IF) 03:01:01 1EP  (Keyboard) usbhid hidraw2 (hid-generic) input8 (hid-generic)\n      1-1.6:1.1         (IF) 03:00:00 1EP  (None) usbhid hidraw3 (hid-generic) input9 input10 (hid-generic)\nusb2              1d6b:0002 09 1IF  [USB 2.00,   480 Mbps,   0mA] (ehci_hcd 0000:00:1d.0) hub\n  2-0:1.0           (IF) 09:00:00 1EP  (Hub::Full speed (or root) hub) hub\n  2-1               8087:0024 09 1IF  [USB 2.00,   480 Mbps,   0mA] (Intel Corp. Integrated Rate Matching Hub) hub\n
Run Code Online (Sandbox Code Playgroud)\n

笔记本电脑内部 4G 调制解调器的示例,首先处于启动默认配置 2(以太网仿真),然后将其切换到配置 3 (MBIM) 后完全相同的设备:

\n
# cat /sys/bus/usb/devices/1-3/configuration\n2\n\n# lsusb.py\nusb1\n 1-3        03f0:a31d 00 7IFs [USB 2.00,  480 Mbps,   2mA] (HP Inc. HP lt4132 LTE/HSPA+ 4G Module)\n  1-3:2.0    (IF) 02:06:00 1EP  (Communications) cdc_ether net/usb0\n  1-3:2.1    (IF) 0a:06:00 2EPs (CDC Data) cdc_ether\n  1-3:2.2    (IF) ff:06:10 3EPs (Vendor Specific) option ttyUSB0\n  1-3:2.3    (IF) ff:06:13 2EPs (Vendor Specific) option ttyUSB1\n  1-3:2.4    (IF) ff:06:12 2EPs (Vendor Specific) option ttyUSB2\n  1-3:2.5    (IF) ff:06:14 2EPs (Vendor Specific) option ttyUSB3\n  1-3:2.6    (IF) ff:06:1b 2EPs (Vendor Specific) option ttyUSB4\n\n# echo 3 > /sys/bus/usb/devices/1-3/configuration\n\n# lsusb.py\nusb1\n 1-3        03f0:a31d 00 3IFs [USB 2.00,  480 Mbps,   2mA] (HP Inc. HP lt4132 LTE/HSPA+ 4G Module)\n  1-3:3.0    (IF) 02:0e:00 1EP  (Communications) cdc_mbim net/wwan0\n  1-3:3.1    (IF) 0a:00:02 2EPs (CDC Data) cdc_mbim\n  1-3:3.2    (IF) ff:06:14 2EPs (Vendor Specific) option ttyUSB0\n
Run Code Online (Sandbox Code Playgroud)\n

  • 仔细观察,似乎 /sys 中的端口 0(即“4-0”、“2-0”等)对应于_集线器本身_,而端口 1 及更高端口对应于实际连接的设备。这也会出现在“lsusb.py -I”中。同时在`lsusb -t`中,为根集线器列出的端口号是[*硬编码*](https://github.com/gregkh/usbutils/blob/master/lsusb-tc#L163)到1;该工具实际上根本不从 /sys 获取它。 (2认同)