Lưu ý: Đây là câu trả lời của Linux ; các hạt nhân khác sẽ có một cách hơi khác để đối phó với điều này.
Bối cảnh
Thật khó để nói về xe buýt USB mà không nói về xe buýt PCI. CPU không thể nói chuyện với bus USB, điều xảy ra là CPU nói chuyện với bus PCI có bộ điều khiển USB được kết nối với nó (và bộ điều khiển / hub USB là thứ lsusb
gọi là bus USB). Các bus PCI được đánh số dựa trên khoảng cách từ CPU, ví dụ:
+-----+
| CPU |
+-----+
| PCI Bus 0
---+--+-----------------------------+
| |
+---+----+ +----+---+
| Bridge | | Bridge |
+---+----+ +----+---+
| PCI bus 1 | PCI bus 2
--+--------+ +-------+-------------+
| | |
Disk Controller USB Controller Network Card
(Device 00) (Device 00) (Device 01)
Nhìn vào man lspci
chúng tôi thấy như sau:
Slot The name of the slot where the device resides
([domain:]bus:device.function). This tag is
always the first in a record.
Vì vậy, bây giờ chúng ta biết làm thế nào để giải thích số PCI. Tiếp theo chúng ta sẽ xem xét các bộ điều khiển USB được kết nối với các bus PCI. Máy tôi hiện đang có cấu hình USB thú vị nên tôi sẽ sử dụng nó làm ví dụ:
$ lspci -tv
-[0000:00]-+-00.0 Advanced Micro Devices, Inc. [AMD] RS780 Host Bridge
+-01.0-[01]----05.0 Advanced Micro Devices, Inc. [AMD/ATI] RS780M [Mobility Radeon HD 3200]
+-04.0-[02]----00.0 Qualcomm Atheros AR928X Wireless Network Adapter (PCI-Express)
+-05.0-[03]----00.0 Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
+-06.0-[04-06]--
+-11.0 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 SATA Controller [IDE mode]
+-12.0 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
+-12.1 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
+-12.2 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
+-13.0 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
+-13.1 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
+-13.2 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
+-14.0 Advanced Micro Devices, Inc. [AMD/ATI] SBx00 SMBus Controller
+-14.1 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 IDE Controller
+-14.2 Advanced Micro Devices, Inc. [AMD/ATI] SBx00 Azalia (Intel HDA)
+-14.3 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 LPC host controller
+-14.4-[07]--
+-14.5 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
+-18.0 Advanced Micro Devices, Inc. [AMD] Family 11h Processor HyperTransport Configuration
+-18.1 Advanced Micro Devices, Inc. [AMD] Family 11h Processor Address Map
+-18.2 Advanced Micro Devices, Inc. [AMD] Family 11h Processor DRAM Controller
+-18.3 Advanced Micro Devices, Inc. [AMD] Family 11h Processor Miscellaneous Control
\-18.4 Advanced Micro Devices, Inc. [AMD] Family 11h Processor Link Control
Chờ đợi chờ đợi, tất cả những điểm cộng là gì? Ở đầu chúng ta có miền và bus PCI -[0000:00]
(máy này chỉ có một bus PCI). Và sau đó chúng tôi có một số thiết bị kết nối với xe buýt đó. Hãy xem những thiết bị USB nào:
$ lspci -tv | grep -i usb
+-12.0 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
+-12.1 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
+-12.2 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
+-13.0 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
+-13.1 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
+-13.2 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
+-14.5 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
Tốt, bây giờ chúng ta hãy so sánh với điều đó lsusb
(tôi sort
chỉ sử dụng để làm cho việc tìm kiếm danh sách sau này dễ dàng hơn):
$ lsusb | sort
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 174f:5a31 Syntek Sonix USB 2.0 Camera
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 046d:c019 Logitech, Inc. Optical Tilt Wheel Mouse
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 002: ID 0b05:1751 ASUSTek Computer, Inc. BT-253 Bluetooth Adapter
Chờ đợi một lần nữa. Chúng tôi có 7 thiết bị USB theo lspci
nhưng 10 thiết bị theo lsusb
! lspci
chỉ liệt kê các bộ điều khiển USB; một bộ điều khiển có thể có nhiều thiết bị USB được gắn vào nó. Hãy để chúng tôi khám phá /sys/bus/
để xem làm thế nào điều này xảy ra.
$ ls -l /sys/bus/usb/devices/
... 1-0:1.0 -> ../../../devices/pci0000:00/0000:00:12.2/usb1/1-0:1.0
... 2-0:1.0 -> ../../../devices/pci0000:00/0000:00:13.2/usb2/2-0:1.0
... 2-1 -> ../../../devices/pci0000:00/0000:00:13.2/usb2/2-1
... 2-1:1.0 -> ../../../devices/pci0000:00/0000:00:13.2/usb2/2-1/2-1:1.0
... 2-1:1.1 -> ../../../devices/pci0000:00/0000:00:13.2/usb2/2-1/2-1:1.1
... 3-0:1.0 -> ../../../devices/pci0000:00/0000:00:12.0/usb3/3-0:1.0
... 3-1 -> ../../../devices/pci0000:00/0000:00:12.0/usb3/3-1
... 3-1:1.0 -> ../../../devices/pci0000:00/0000:00:12.0/usb3/3-1/3-1:1.0
... 4-0:1.0 -> ../../../devices/pci0000:00/0000:00:12.1/usb4/4-0:1.0
... 5-0:1.0 -> ../../../devices/pci0000:00/0000:00:13.0/usb5/5-0:1.0
... 6-0:1.0 -> ../../../devices/pci0000:00/0000:00:13.1/usb6/6-0:1.0
... 7-0:1.0 -> ../../../devices/pci0000:00/0000:00:14.5/usb7/7-0:1.0
... 7-1 -> ../../../devices/pci0000:00/0000:00:14.5/usb7/7-1
... 7-1:1.0 -> ../../../devices/pci0000:00/0000:00:14.5/usb7/7-1/7-1:1.0
... 7-1:1.1 -> ../../../devices/pci0000:00/0000:00:14.5/usb7/7-1/7-1:1.1
... 7-1:1.2 -> ../../../devices/pci0000:00/0000:00:14.5/usb7/7-1/7-1:1.2
... 7-1:1.3 -> ../../../devices/pci0000:00/0000:00:14.5/usb7/7-1/7-1:1.3
... usb1 -> ../../../devices/pci0000:00/0000:00:12.2/usb1
... usb2 -> ../../../devices/pci0000:00/0000:00:13.2/usb2
... usb3 -> ../../../devices/pci0000:00/0000:00:12.0/usb3
... usb4 -> ../../../devices/pci0000:00/0000:00:12.1/usb4
... usb5 -> ../../../devices/pci0000:00/0000:00:13.0/usb5
... usb6 -> ../../../devices/pci0000:00/0000:00:13.1/usb6
... usb7 -> ../../../devices/pci0000:00/0000:00:14.5/usb7
Bây giờ điều này đã bắt đầu có ý nghĩa, chúng tôi có 7 bộ điều khiển USB được cắm vào bus PCI dưới dạng thiết bị. Ví dụ: USB bus 001 tương ứng với thiết bị PCI 0000:00:12.2
và USB bus 007 tương ứng với 0000:00:14.5
thiết bị.
Đánh số thiết bị
Các thư mục bắt đầu bằng số bus USB (ví dụ 7-1:1.2
) là các thiết bị thực tế được kết nối với bộ điều khiển USB. Giống như bus PCI có thể có một số thiết bị được kết nối với bộ điều khiển USB (bộ tập trung) có thể có một số thiết bị USB được kết nối với nó.
Số thiết bị chỉ đơn giản là bộ đếm: thiết bị đầu tiên được kết nối có 1, tiếp theo được 2, v.v. Nhưng có một chút nữa: USB được thiết kế để cắm nóng; do đó bạn có thể kết nối và ngắt kết nối thiết bị. Khi bạn ngắt kết nối thiết bị USB, số thiết bị sẽ không được sử dụng lại bởi nhân cho bất kỳ thiết bị nào khác trên bộ điều khiển USB đó. Ví dụ: nếu bạn kết nối và ngắt kết nối ổ bút và tiếp tục làm, lsusb
bạn sẽ thấy số thiết bị cho ổ bút của mình tăng lên.
Đánh số xe buýt
Nếu bạn đã đọc những điều trên với sự chú ý, bạn có thể tự hỏi về một điều mà tôi đã không chạm vào. Thứ tự đánh số PCI không tương ứng với thứ tự các bộ điều khiển USB được đánh số! Chúng ta hãy xem điều đó một lần nữa:
USB | PCI
-----+----
usb1 | 0000:00/0000:00:12.2
usb2 | 0000:00/0000:00:13.2
usb3 | 0000:00/0000:00:12.0
usb4 | 0000:00/0000:00:12.1
usb5 | 0000:00/0000:00:13.0
usb6 | 0000:00/0000:00:13.1
usb7 | 0000:00/0000:00:14.5
Danh sách theo thứ tự, nhưng không hoàn toàn. Hai bộ điều khiển USB đầu tiên dường như không còn hoạt động. Tuy nhiên, có một lý do tại sao: Nếu bạn nhìn vào lspci
bên trên, bạn sẽ thấy đó là EHCI
USB (USB 2.0), trong khi tất cả các bộ điều khiển USB khác là OHCI
USB (USB 1.x).
Do đó, chúng ta có thể vẽ lại bảng này như sau:
USB | PCI
-----+----
usb1 | 0000:00/0000:00:12.2
usb2 | 0000:00/0000:00:13.2 USB 2.0
-----+---------------------------------
usb3 | 0000:00/0000:00:12.0 USB 1.x
usb4 | 0000:00/0000:00:12.1
usb5 | 0000:00/0000:00:13.0
usb6 | 0000:00/0000:00:13.1
usb7 | 0000:00/0000:00:14.5
Và việc gán số trở nên rõ ràng.