USB (Universal Serial Bus) は、プラグアンドプレイやホットプラグに対応し、さまざまな周辺機器に接続できるシリアル転送方式のインターフェイス規格です。USB ポートから電力供給も可能であり、最大で 127 台のデバイスを接続できます。カーネル 2.4 で USB 1.1 とホットプラグがサポートされ、カーネル 2.6 で USB 2.0, USB 3.0 に正式に対応しました。
各規格の比較は以下の通りです。
規格 | 転送速度 | ドライバ(カーネルモジュール) |
---|---|---|
USB 1.0/1.1 | 12Mbps | UHCI (Universal Host Controller Interface), OHCI (Open Host Controller Interface) |
USB 2.0 | 480Mbps | EHCI (Enhanced Host Controller Interface) |
USB 3.0/3.1 | 5Gbps | xHCI (Extensible Host Controller Interface) |
USB デバイスはいくつかのデバイスクラス(種類)に分かれています。それぞれのデバイスクラスにはクラスドライバという汎用ドライバが用意されています。以下は主な USB デバイスクラスをまとめたものです。
デバイスクラス | デバイス |
---|---|
HID (Human Interface Device) | キーボード、マウスなど。 |
MAS Storage Class | ハードディスク、USB メモリなど。 |
ACM Communication Device Class | モデム、TA など。 |
Audio Class | スピーカー、マイクなど。 |
Linux 環境における USB デバイスの確認は、lsusb コマンドを使用します。実際に lsusb コマンドを使用してみましょう。ここでは、-v オプションを使用して詳細も出力しています。
myadmin@ubuntu:~$ lsusb -v
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 3.00
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 3
bMaxPacketSize0 9
idVendor 0x1d6b Linux Foundation
idProduct 0x0003 3.0 root hub
bcdDevice 5.15
iManufacturer 3 Linux 5.15.0-92-generic xhci-hcd
iProduct 2 xHCI Host Controller
iSerial 1 0000:00:14.0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x001f
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 12
bMaxBurst 0
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 1 Single TT
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
idProduct 0x0002 2.0 root hub
bcdDevice 5.15
iManufacturer 3 Linux 5.15.0-92-generic xhci-hcd
iProduct 2 xHCI Host Controller
iSerial 1 0000:00:14.0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0019
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 12
この出力では、前半が USB 3.0、後半が USB 2.0 を示していますが、どちらも xHCI を使用していることが分かります。これは、この USB コントローラーが USB 2.0 と USB 3.0 に対応しているため、xHCI で両方をまかなっているのか、もしくは、実際は USB 2.0 では EHCI が使用されているが、lsusb コマンドの出力の不具合であるか、のどちらかだと思います。
LPIC USB