クラスドライバ
USBでは、「デバイスクラス」と呼ぶ、周辺機器の機能ごとにデータ送受信形式を
標準化仕様があります。デバイスクラス仕様に準拠した機器類は、「クラスドライバ」と
呼ばれる共通のデバイスドライバ・ソフトウェアによって動作します。
それぞれのデバイスには固有の「クラスID」が設定されており、デバイスは自身が属す
クラスのデバイスドライバを使用すればよく、製品ごとにドライバが必要ありません。
なお、特定のデバイスクラスに属さないUSBデバイスについては、ベンダー専用の
「ベンダーデバイスドライバ」を利用します。
主なデバイスクラスは次の表のとおりです。
クラスID | クラス名 | 用途 | |
00h | 0 | 指定なし | 使われていない |
01h | 1 | Audio | スピーカー、マイク、サウンドカード |
02h | 2 | USB communications device class | イーサネットカード、モデム |
03h | 3 | USB human interface device class | キーボード、マウス |
07h | 7 | Printer | プリンター |
08h | 8 | USB mass-storage device class | USBメモリ、外部記憶装置 |
09h | 9 | USB hub | USB ハブ |
E0h | 240 | Wireless Controller | Wi-Fiアダプタ、Buletoothアダプタ |
FFh | 255 | ベンダ-定義 | ベンダー定義のドライバを使用することを示す |
ホットプラグ
USBではマシンの電源を入れた状態でUSB機器の取り付け、取り外しができます。
この機能をホットプラグと呼びます。
Linuxではホットプラグに対応した周辺機器をマシンに接続すると
動的にデバイスを管理するデーモンであるudevがカーネルからの
通知を受け取り、/etc/udev/以下のスクリプトを実行し、
デバイスファイルを動的に作成します。
マシンに接続されているUSB機器は’lsusb’コマンドで確認できます。
[コマンド]
# lsusb
[実行例]
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd
‘lsusb’コマンドはオプション’-v’で詳細な情報が、オプション’-t’で
接続デバイスをツリー形式で表示します。
[コマンド]
# lsusb -t
[実行例]
Bus# 1
`-Dev# 1 Vendor 0x1d6b Product 0x0001
`-Dev# 2 Vendor 0x0627 Product 0x0001
この例では特にUSB機器は接続されていないようです。
また、’cat /proc/bus/usb/devices’でも接続されている
USBデバイスの情報が確認できます
[コマンド]
# cat /proc/bus/usb/devices
[実行例]
T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0001 Rev= 2.06
S: Manufacturer=Linux 2.6.32-279.9.1.el6.x86_64 uhci_hcd
S: Product=UHCI Host Controller
S: SerialNumber=0000:00:01.2
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0627 ProdID=0001 Rev= 0.00
S: Manufacturer=QEMU 0.12.3
S: Product=QEMU USB Tablet
S: SerialNumber=1
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=usbhid
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms