我可以将 /sys 中的 USB 设备关联到 Dmidecode 中的特定 USB 连接器吗?

我可以将 /sys 中的 USB 设备关联到 Dmidecode 中的特定 USB 连接器吗?

经过一番网上搜索后,我认为答案可能是“否”,但是:

我可以从 sysfs 中找到与 USB 设备相对应的 USB 端口描述(根据 dmidecode)吗?

我们可以通过列出来枚举所有 USB 集线器和设备/sys/bus/usb/devices。例如:

lrwxrwxrwx 1 root root 0 May 18 09:40 1-2 -> ../../../devices/pci0000:00/0000:00:14.0/usb1/1-2
lrwxrwxrwx 1 root root 0 May 18 09:40 1-2:1.0 -> ../../../devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0
lrwxrwxrwx 1 root root 0 May 18 09:36 2-0:1.0 -> ../../../devices/pci0000:00/0000:00:14.0/usb2/2-0:1.0
lrwxrwxrwx 1 root root 0 May 18 09:36 2-3 -> ../../../devices/pci0000:00/0000:00:14.0/usb2/2-3
lrwxrwxrwx 1 root root 0 May 18 09:36 2-3:1.0 -> ../../../devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0
lrwxrwxrwx 1 root root 0 May 18 09:36 usb1 -> ../../../devices/pci0000:00/0000:00:14.0/usb1
lrwxrwxrwx 1 root root 0 May 18 09:36 usb2 -> ../../../devices/pci0000:00/0000:00:14.0/usb2

...我们可以通过执行以下操作列出机器上的所有内置 USB 端口dmidecode -t connector。例如,它显示(以及许多其他连接器):

Handle 0x000D, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: USB REAR
    Internal Connector Type: Proprietary
    External Reference Designator: Rear: USB-1
    External Connector Type: Access Bus (USB)
    Port Type: USB

[...]

Handle 0x0014, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: USB 3.0 REAR
    Internal Connector Type: Proprietary
    External Reference Designator: Rear: USB 1
    External Connector Type: Access Bus (USB)
    Port Type: USB

(在我的机器上,每个 USB 端口看起来都以“USB”和“USB 3.0”的形式出现两次。)

我希望能够显示与特定 USB 设备相对应的连接器描述(“后部:USB 1”),但似乎没有可靠的方法将 /sys/bus/USB 设备与 dmidecode 连接器相关联 - 是那里?

(在我的特定情况下,很容易将总线中的“usb1”与 Dmidecode 中的“USB 1”关联起来……但我愿意打赌这是一个巧合。)

编辑:或者如果不是 dmidecode,其他一些可以提供端口外部描述的工具。

答案1

的输出dmidecode基于 SMBIOS 数据。

截至撰写本文时,这显然是 SMBIOS 规范的最新版本。

第 70 页的下半部分描述了端口连接器信息的数据结构。唯一有意义的值是 DMI 结构句柄(一个简单的 16 位数字)、内部和外部连接器类型值以及分别描述系统板和机箱外部连接器标识符的两个字符串。

只有句柄号对于特定连接器来说是唯一的,因此只有它可以用作将特定 USB 设备与 SMBIOS/DMI 连接器信息联系起来的标识符。但 USB 硬件方面似乎没有任何东西可以引用这些数字来指示哪个连接器属于哪个设备。

usb1另外,usb2/sys/bus/usb/devices列表中并不指单个连接器,而是指不同的连接器USB总线。 USB 3.x 系统始终至少有两条总线:一条总线用于处理 USB 2 及较旧的速度,另一条总线用于处理 USB 3+ 速度。这反映了这样一个事实:较旧的速度使用一组数据线,而较新的 USB3.x 超快速传输模式将使用另一组数据线。每条总线通常都有自己的根集线器,其中可以有不同数量的 USB 连接器。

因此,要将特定的 DMI 连接器信息结构绑定到特定的 USB 端口设备,USB 集线器描述符必须具有指定适当的 DMI 结构句柄的数据字段。

或者,USB 控制器的 PCI 设备信息必须包括属于该控制器的 DMI 句柄列表,但这仅允许识别哪组 USB 端口属于哪个控制器,而不是特定端口的唯一标识。

不幸的是,我在 USB 或 PCI 总线信息上找不到任何包含此类 DMI 句柄或等效端口描述的数据字段。因此,恐怕答案似乎是“不,目前通常不可能将物理端口标识符与各个 Linux USB 总线/端口对象联系起来。”

一些名牌系统可能有一些特定于供应商的总线数据扩展实际上会包含此信息,但只要没有可以依赖的广泛采用的标准实践,一般答案仍然是“不,该信息不可用”。

相关内容