/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 장치("Rear: USB 1")에 해당하는 커넥터 설명을 표시하고 싶지만 /sys/bus/USB 장치를 dmidecode 커넥터와 연결하는 안정적인 방법이 없는 것 같습니다. 그거 거기 있어?

(나의 특별한 경우에는 버스의 "usb1"을 Dmidecode의 "USB 1"과 연관시키는 것이 쉽지만... 우연의 일치라고 장담합니다.)

편집: 또는 dmidecode가 아닌 경우 포트에 대한 외부 설명을 제공할 수 있는 다른 도구입니다.

답변1

출력은 dmidecodeSMBIOS 데이터를 기반으로 합니다.

이 글을 쓰는 시점에서 이는 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 버스/포트 개체와 연결하는 것이 불가능합니다."인 것 같습니다.

일부 유명 브랜드 시스템가능한실제로 이 정보를 포함하는 일부 공급업체별 버스 데이터 확장이 있지만 신뢰할 수 있는 널리 채택된 표준 관행이 없는 한 일반적인 대답은 여전히 ​​"아니요, 해당 정보를 사용할 수 없습니다"입니다.

관련 정보