Usb

我可以將來自 /sys 的 USB 設備關聯到來自 Dmidecode 的特定 USB 連接器嗎?

  • June 5, 2021

在網上搜尋了一下,我認為答案可能是“不”,但是:

我可以從 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,其他一些可以提供埠外部描述的工具。

的輸出dmidecode基於 SMBIOS 數據。

在撰寫本文時,這顯然是 SMBIOS 規範的最新版本。

第 70 頁的下半部分描述了埠連接器資訊的資料結構。唯一有意義的值是 DMI 結構句柄(一個簡單的 16 位數字)、內部和外部連接器類型值,以及分別描述系統板上和機箱外部連接器標識符的兩個字元串。

只有句柄號對於特定的連接器是唯一的,因此只有它可以用作可以將特定 USB 設備與 SMBIOS/DMI 連接器資訊聯繫起來的標識符。但似乎在 USB 硬體方面沒有任何東西可以參考這些數字來指示哪個連接器屬於哪個設備。

此外,usb1usb2列表中/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 匯流排/埠對象。”

一些名牌系統可能有一些特定於供應商的匯流排數據擴展,實際上會包含這些資訊,但只要沒有可以依賴的被廣泛採用的標準實踐,一般的答案仍然是“不,那資訊不可用。”

引用自:https://unix.stackexchange.com/questions/652974