Not: Bu bir Linux yanıtıdır; diğer çekirdeklerin bununla başa çıkmak için biraz farklı bir yolu olacaktır.
bağlam
PCI veriyollarından bahsetmeden USB veriyolları hakkında konuşmak zordur. CPU bir USB veriyoluyla konuşamaz, olan şey, CPU'nun kendisine bağlı bir USB denetleyicisi olan bir PCI veriyoluyla (ve lsusb
USB veri yolu olarak adlandırılan USB denetleyici / hub ) konuşmasıdır. PCI veriyolları, CPU'dan ne kadar uzakta olduklarına göre numaralandırılır, örneğin:
+-----+
| CPU |
+-----+
| PCI Bus 0
---+--+-----------------------------+
| |
+---+----+ +----+---+
| Bridge | | Bridge |
+---+----+ +----+---+
| PCI bus 1 | PCI bus 2
--+--------+ +-------+-------------+
| | |
Disk Controller USB Controller Network Card
(Device 00) (Device 00) (Device 01)
Baktığımızda man lspci
aşağıdakileri görüyoruz:
Slot The name of the slot where the device resides
([domain:]bus:device.function). This tag is
always the first in a record.
Bu nedenle artık PCI numaralarını nasıl yorumlayacağımızı biliyoruz. Sonra PCI veriyollarına bağlı USB denetleyicilerine bakacağız. Şu anda bulunduğum makinenin ilginç bir USB yapılandırması var, bu yüzden örnek olarak kullanacağım:
$ 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
Bekle bekle bekle, tüm bu artılar neler? Üstte etki alanı ve PCI veri yolu var -[0000:00]
(bu makinede yalnızca bir PCI veri yolu var). Ve sonra o veri yoluna bağlı birkaç cihazımız var. Hangisinin USB cihazı olduğunu görelim:
$ 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
Güzel, şimdi karşı karşılaştırın bize lsusb
( sort
sadece daha sonra listede daha kolay arama yapmak için kullanı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
Tekrar bekle. Biz göre 7 USB cihazlar, lspci
ama göre 10 cihazlar var lsusb
! lspci
yalnızca USB denetleyicilerini listeler; bir denetleyiciye bağlı birden fazla USB aygıtı olabilir. Bunun /sys/bus/
nasıl olduğunu görmek için inceleyelim .
$ 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
Şimdi bu mantıklı olmaya başladı, PCI veriyoluna aygıtlar olarak takılan 7 USB denetleyicimiz var. Örneğin, USB veriyolu 001 PCI cihazına 0000:00:12.2
ve USB veriyolu 007 0000:00:14.5
cihaza karşılık gelir .
Cihaz numaralandırma
USB veri yolu numarasıyla (ör. 7-1:1.2
) Başlayan dizinler , USB denetleyicisine bağlı gerçek cihazlardır. Bir PCI veri yolunun birden fazla cihaza bağlı olması gibi, bir USB denetleyicisine (bir hub) bağlı birden fazla USB cihazı olabilir.
Cihaz numaraları basitçe sayaçlardır: ilk bağlanan cihaz 1 alır, diğeri 2 alır vb. Ama biraz daha fazlası var: USB çalışırken takılabilir olacak şekilde tasarlandı; böylece cihazları bağlayabilir ve bağlantısını kesebilirsiniz. Bir USB aygıtının bağlantısını kestiğinizde, aygıt numarası çekirdek tarafından söz konusu USB denetleyicisindeki başka herhangi bir aygıt için bir daha kullanılmaz. Örneğin, bir kalem sürücü bağlayıp çıkarırsanız ve yapmaya devam lsusb
ederseniz, kalem sürücünüzün cihaz numarasının yükseldiğini görürsünüz.
Otobüs numaralandırma
Yukarıdakileri dikkatle okuduysanız, dokunmadığım bir şeyi merak ediyor olabilirsiniz. PCI numaralandırmasının sırası, USB denetleyicilerinin numaralandırılma sırasına karşılık gelmez! Tekrar görelim:
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
Liste sıralı ama tam olarak değil. İlk iki USB denetleyicisi bozuk görünüyor. Yine de, bunun bir nedeni var: lspci
Yukarıya bakarsanız , bunların EHCI
USB (USB 2.0) olduğunu, diğer tüm USB denetleyicilerinin ise OHCI
USB (USB 1.x) olduğunu göreceksiniz .
Bu nedenle bu tabloyu şu şekilde yeniden çizebiliriz:
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
Ve sayı ataması netleşir.