Linux에서 USB 컨트롤러의 PCI 슬롯을 찾는 방법은 무엇입니까?

Linux에서 USB 컨트롤러의 PCI 슬롯을 찾는 방법은 무엇입니까?

여기에는 거의 일반적인 Linux 상자가 있습니다. 따라서 일부 USB 컨트롤러에는 PCI(*-X 등) 버스가 있고 해당 USB 컨트롤러에는 USB 장치가 있습니다. 이와 유사합니다:

$ lspci|grep USB
00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:12.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:13.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:13.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:14.5 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
00:16.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:16.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
02:00.0 USB controller: VIA Technologies, Inc. VL805 USB 3.0 Host Controller (rev 01)

또한 아래와 같은 USB 장치 트리가 있습니다.

$ lsusb -t
/:  Bus 07.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/4p, 12M
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/5p, 12M
    |__ Port 5: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/5p, 12M
    |__ Port 2: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 2: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 3: Dev 12, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 4: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 4: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/4p, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/5p, 480M
    |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M
        |__ Port 1: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M
        |__ Port 4: Dev 11, If 0, Class=Vendor Specific Class, Driver=r8712u, 480M
    |__ Port 3: Dev 3, If 0, Class=Vendor Specific Class, Driver=MOSCHIP usb-ethernet driver, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/5p, 480M
    |__ Port 1: Dev 6, If 0, Class=Video, Driver=uvcvideo, 480M
    |__ Port 1: Dev 6, If 1, Class=Video, Driver=uvcvideo, 480M
    |__ Port 1: Dev 6, If 2, Class=Audio, Driver=snd-usb-audio, 480M
    |__ Port 1: Dev 6, If 3, Class=Audio, Driver=snd-usb-audio, 480M

따라서 PCI 버스에서 USB 컨트롤러를 볼 수 있고 USB 컨트롤러에서 USB 장치를 볼 수 있습니다.

하지만 USB 버스의 어떤 USB 컨트롤러 번호가 어떤 PCI 버스 번호에 속하는지는 알 수 없습니다!

그것을 찾는 방법은 무엇입니까?

답변1

iSerial이 정보는 자세한 출력의 항목에서 검색할 수 있습니다 lsusb. 가장 쉬운 방법은 출력을 뷰어에 전달 less하고 수동 검색을 사용하는 것 /입니다 grep.

$ lsusb -v 2>/dev/null | grep '^Bus\|iSerial'

Bus 001 Device 029: ID 12d1:1506 Huawei Technologies Co., Ltd. Modem/Networkcard
  iSerial                 0 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  iSerial                 1 0000:00:1d.7
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
  iSerial                 1 0000:00:1d.3
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
  iSerial                 1 0000:00:1d.2
...

답변2

(버전 기준 lsusb.py) 이 정보를 즉시 표시할 수 있는 도구가 있습니다.usbutils002

strohel@mat480s ~ $ lsusb.py -ciu
usb1              1d6b:0002 09 1IF  [USB 2.00,   480 Mbps,   0mA] (xhci-hcd 0000:00:14.0) hub
  1-2               046d:c069 00 1IF  [USB 2.00,   1.5 Mbps,  98mA] (Logitech USB Laser Mouse)

여기0000:00:14.0컨트롤러의 PCI 버스 ID입니다.

strohel@mat480s ~ $ lspci | grep 00:14.0
00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller (rev 21)

답변3

좀 더 시각적인 학습 스타일을 원하는 사람들을 위한 더욱 사용자 친화적인 또 다른 GUI 옵션:

sudo lshw -html > /tmp/lshw.html

그런 다음 브라우저에서 엽니다.

xdg-open /tmp/lshw.html  # Opens in default browser

# OR your favorite browser:
google-chrome /tmp/lshw.html

firefox /tmp/lshw.html

관련 정보