LinuxのUSBとは?ホットプラグやUSBコントローラの仕組みについてまとめました。
USBとは
USBとは、コンピュータと周辺デバイスの間で用いられる通信規格です。
- USBの特徴
- 接続可能なデバイス数は最大127台
- ホットプラグ対応(電源投入状態で接続・切断が可能)
- バスパワー対応(USBポートでデバイスに電源供給可能)
- デバイスの種類に関わらず同一のインターフェース(コネクタ)で接続可能
ホットプラグの仕組み
「/etc/hotplug」以下にあるスクリプトが以下の動作を行うことで、ホットプラグを実現しています。
- デバイス接続
- Linuxカーネルがudevd(デーモン)に通知
- udevdは、「/etc/udevd/」以下にあるスクリプトファイルを実行し、動的にデバイスファイルを作成
- デバイスがhald(デバイスのデータベースを管理するデーモン)に通知され、新規のデバイス登録
- dbusが各アプリケーションにデバイス情報を通知し、各アプリケーションは接続されたデバイスを使用できる。
- 「/var/log/message」に接続されたデバイス情報のログを保存
- hald
- 「fstab-sync」を呼び出して「/etc/fstab」ファイルを動的に更新(追加、削除)する。
- dbus
- イベントを各種アプリケーションに通知するために、アプリケーション間のプロセス間通信を行うためのメッセージバス。
デバイスファイルを動的に作成するときのルール
udevが動的にデバイスファイルを作成するときのルール(どんなデバイスが接続されたら、どんなデバイスファイルを作るかと)は、「/etc/udev/rules.d/」で定義されており、設定・変更が可能です。
クラスドライバ
クラス ドライバは、特定のUSB対応デバイス(ディスクドライブ、プリンタなど)と通信可能なフトウェアコンポーネント。適切特定のUSB対応デバイスに対応するクラス ドライバがあれば、専用のソフトウェアがなくても通信接続してすぐに利用できます。
ただし、クラス ドライバは一般的なクラスのUSB対応デバイス向けに作成されているため、特殊の機能を持つUSB対応デバイスの場合、特殊な機能だけが使えないこともあります。その場合は、製品に付属しているドライバをインストールする必要があります。
USBコントローラの確認
USBコントローラ(USBデバイスの制御装置)には、以下のものがあります。
- UHCI(Universal Host Controler Interface)
- 主にIntelが開発し、USB1.xに対応
- コントローラドライバはusb-uhci.o
- OHCI(Open Host Controler Interface)
- 主にマイクロソフトが開発し、USB1.xに対応
- コントローラドライバはusb-ohci.o
- UHCIよりCPUの負荷が小さい
- EHCI(Enhanced Host Controler Interface)
- 主にIntelが開発し、USB2.xに対応
dmesg、spci、lsmod コマンドでUSBコントローラを確認できます。
$ dmesg | grep usb
$ lspci -v
$ lsmod | grep ehci
sbmodules コマンドで、USBデバイスが使用しているカーネルモジュールを確認できます。
例えば、「BUS 001、デバイス 001」のカーネルモジュールは以下のコマンドで確認できます。
$ usbmodules –device /proc/bus/usb/001/001
USBデバイス情報の取得と設定方法
USBデバイスの情報は、「/proc/bus/usb」以下の保存されています。
例えば、コンピュータに接続されているUSBデバイスの情報は、「/proc/bus/usb/devices」ファイルにあります。に記述さ$ cat /proc/bus/usb/devices
USBデバイス情報の取得(lsusbコマンド)
lsusb コマンドでもUSBデバイスの情報を確認できます。
lsusb [オプション]
オプション | 説明 |
---|---|
-v | 詳細情報を表示 |
-s [[パス]:] [デバイスID] | 指定したパスやデバイスIDのデバイスのみ表示 |
-t | ツリー表示 |
$ lsusb
コメント