Gentoo Linux USBガイド
1.
はじめに
USBとは?
USBは、ユニバーサルシリアルバスの略で、基本的にはコンピュータと他の様々な周辺装置の間で通信を可能にする外部インタフェース標準です。
今日、最もよく用いられているUSBデバイスには、キーボード、マウス、USBメモリ、デジタルカメラ、外付けCD & DVDドライブ、プリンタなどがあります。
現在使用されているUSBのバージョンは、USB 1.1とUSB 2.0の二つです。
USBは、以前のバージョンに対して常に後方互換性を保ってきたので、USB 2.0はUSB 1.1に対して後方互換性があります。
最新のUSBデバイスは通常USB 2.0に対応しています。
USB 2.0は、最大データ転送速度 480Mbps(60Mbps)をサポートしており、これが二つの標準の間の大きな違いです。
USBには、デバイスがすべてホットプラグ可能であるという利点もあります。
ホットプラグ可能とは、これらのデバイスを利用可能にするためにシステムを再起動する必要がないということです。
技術展望
カーネルの細かい設定オプションについて見ていく前に、USBの詳細について少し見ていくことにしましょう。
もし急いでいてこの節を飛ばしたいなら、カーネルの設定へ進んでください。
USBシステムは、ホストコントローラ、ハブ、その他のデバイスをつなげるルートハブから構成されます。
ハブを含めて最大127台のUSBデバイスをサポートできます。
ホストコントローラは、USBデバイスとOS間の単なるハードウェアインタフェースです。
今日用いられているHCI(ホストコントローラインタフェース)は三つあります。
Compaq主導のOHCI(Open HCI)、そしてIntel主導のUHCI(Universal HCI)とEHCI(Enhanced HCI)です。
OHCIとUHCIの二つはUSB 1.1の業界標準インタフェースですが、EHCIはUSB 2.0用です。
ハードウェアベンダは、システムがハードウェアと相互通信できるインタフェースをプログラマに提供しています。
これをHCDあるいはホストコントローラデバイスといいます。
このHCDを通してデバイスはシステムソフトウェアと相互通信します。
次の図を見れば、よりわかりやすいでしょう。
コード表示 1.1: USBアーキテクチャの概略 |
+ ---- Hardware ---- + ---- Software ---- +
| | |
| [USB Dev] -+-> {EHCI} -+---> ( EHCD ) |
| | | | User
| `-> {UHCI} -+---> ( UHCD ) |
| | |
+ ---- Hardware ---- + ---- Software ---- +
|
USBデバイスは、カスタムドライバかシステムに既にあるデバイスかどちらかを使うことができます。
これは、デバイスクラスの概念に基づいています。
これは、あるデバイスが特定のクラスに属していれば、同じクラスに属している他のデバイスは同じデバイスドライバを利用できるというものです。
これらクラスには、キーボードやマウスのような入力デバイスを対象とするUSB HID(Human Interface Device)クラス、そしてUSBメモリ、デジタルカメラ、オーディオプレーヤーなどを対象とするUSBマスストレージデバイスクラス、さらにUSBモデムやそれに似たデバイスを基本的に対象とするUSB CDC(コミュニケーションデバイスクラス)といったものがあります。
あなたのマシンに何がありますか?
あなたのマシンがUSB 2.0をサポートしているかどうかは、とても簡単にわかります。
このために、lspciコマンドを利用します。
注意:
lspciツールは、sys-apps/pciutilsパッケージの一部です。
これをインストールしていない場合は、emerge pciutilsしてください。
lspciコマンドを実行するにはrootでなければならないことに注意しましょう。
|
コード表示 1.2: lspciの様々な出力 |
# lspci -v | grep USB
0000:00:04.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB (rev 01) (prog-if 00 [UHCI])
00:1d.0 USB Controller: Intel Corp. 82801DB USB (Hub #1) (rev 01) (prog-if 00 [UHCI])
00:1d.1 USB Controller: Intel Corp. 82801DB USB (Hub #2) (rev 01) (prog-if 00 [UHCI])
00:1d.2 USB Controller: Intel Corp. 82801DB USB (Hub #3) (rev 01) (prog-if 00 [UHCI])
00:1d.7 USB Controller: Intel Corp. 82801DB USB EHCI Controller (rev 01) (prog-if 20 [EHCI])
|
lspciコマンドを使うと、システムがUSB 2.0をサポートしているかがわかります。
カーネルで対応するオプションを有効にするときにこれが役に立つでしょう。
2.
カーネルの設定
カーネルを入手する
まず、あなたの選んだカーネルソースをemergeしてください。
ここでは、gentoo-sourcesを使うことにしましょう。
Portageで入手できる様々なカーネルソースについての詳しい情報は、Gentoo Linux Kernel Guide(日本語訳)をご覧ください。
コード表示 2.1: カーネルソースを入手する |
# emerge gentoo-sources
|
さて、カーネルの設定の仕事に取りかかりましょう。
コード表示 2.2: ソースに立ち向かう |
# cd /usr/src/linux
# make menuconfig
|
注意:
上の例では、/usr/src/linuxシンボリックリンクがあなたの利用したいカーネルソースを指していると仮定しています。
先に進む前に、利用したいカーネルソースと同じであることを確認してください。
|
カーネル用の設定オプション
では、持っているデバイス用の適切なUSBサポートを確実にするために、カーネルで有効にしなければならないオプションをいくつか見ていきましょう。
注意:
この文書の例では、例えばUSBマスストレージデバイス(ほとんどのカメラやUSBメモリ)といった、一般に必要になるような基本的なUSBサポート用の設定オプションを紹介していきます。
設定が必要な特定のUSBデバイスを持っているなら、カーネル標準のドライバ、または利用可能なカスタムドライバのサポートがそのデバイスにあるかどうかを調べるために、デバイスの説明書やオンライン検索を見てください。
簡単のために、すべての例でオプションをカーネルに組み込むことに注意してください。
モジュール式のカーネルが欲しいなら、必ず様々なモジュールを書きとめて、それに応じてあなたの設定ファイルを調整してください。
|
コード表示 2.3: make menuconfigオプション |
Device Drivers --->
SCSI device support --->
--- SCSI support type (disk, tape, CD-ROM)
<*> SCSI disk support
USB support --->
<*> Support for Host-side USB
[*] USB device filesystem
--- USB Host Controller Drivers
<*> EHCI HCD (USB 2.0) support
< > OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
< > USB Modem (CDC ACM) support
<*> USB Printer support
<*> USB Mass Storage support
USB Network Adapters --->
<*> USB RTL8150 based ethernet device support (EXPERIMENTAL)
USB Serial Converter support --->
<*> USB Serial Converter support
<*> USB Prolific 2303 Single Port Serial Driver (NEW)
|
もし、キーボードやマウス、ジョイスティック、その他何か入力デバイスをお持ちであれば、
HIDサポートを有効にしてください。"Device drivers"に1レベル戻り、HIDサポートを次のように有効にしてください。
コード表示 2.4: HIDサポートの有効化 |
Device drivers --->
[*] HID Devices --->
<*> USB Human Interface Device (full HID) support
|
オプションを設定しましたので、カーネルを(再)コンパイルできます。
リブートして新しいカーネルになるとUSBサポートが動作するでしょう。
つぎに、動作中のUSBを見るにすすみ、すべてが予定通りに動いているかどうか見てください。
3.
動作中のUSBを見る
dmesgはあなたの友達です!
ついにUSBデバイスを動作させるときがきました:)それでは初めましょう。
この章では、様々なUSBデバイスに対してシステムがどのように応答するか見ていきます。
512 MBのUSBメモリを挿して始めましょう。
他の似たようなマスストレージデバイスを使うこともあるでしょう。
何が起きているか、システムがデバイスにどのように応答したかを見るためにdmesgを主に使います。
注意:
dmesgは、ブートアップメッセージをすべて持っているカーネルのリングバッファを読むので、
私たちが必要とする情報の前に、前もってたくさんの出力を一般的に提供するでしょう。
次の出力例では、関連する部分だけを読みやすくするために余分にスペースを空けています。
もし必要なら、システムの出力を見るためにdmesg | moreもしくはdmesg | lessを使ってください。
|
コード表示 3.1: USBメモリについてのdmesgの出力 |
# dmesg | less
usb 1-1: new full speed USB device using uhci_hcd and address 2
scsi0 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 2
usb-storage: waiting for device to settle before scanning
Vendor: JetFlash Model: TS512MJF2A Rev: 1.00
Type: Direct-Access ANSI SCSI revision: 02
SCSI device sda: 1003600 512-byte hdwr sectors (514 MB)
sda: Write Protect is off
sda: Mode Sense: 0b 00 00 08
sda: assuming drive cache: write through
SCSI device sda: 1003600 512-byte hdwr sectors (514 MB)
/dev/scsi/host0/bus0/target0/lun0: p1
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
usb-storage: device scan complete
usb 1-1: USB disconnect, address 2
|
デバイスが接続されたりマウントされたりすると、通常のハードディスクのようにアクセスすることができます。
cp、mv、rmなどのよくある命令は正常に動作します。
USBスティック上にファイルシステムを作成し、フォーマットすることもできます。
コード表示 3.2: USBメモリへアクセスする |
# mount /dev/sda1 /mnt/usb
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda8 9.4G 7.5G 1.9G 80% /
/dev/hda9 11G 8.1G 2.4G 78% /usr
none 189M 0 189M 0% /dev/shm
/dev/sda1 490M 34M 457M 7% /mnt/usb
|
注意:
デジタルカメラには、USBメモリと同じ方法でアクセスすることができます。
私はNikon Coolpix 5200を持っていますが、同じ方法でアクセスしました。
最近のカメラは、たいていUSBマスストレージとPTP(Picture Transfer Protocol)の2種類の画像転送方法を持っています。
カメラは、USBマスストレージデバイスのように設定され動作します。
それゆえ詳しくは説明しませんが、手続きはメモリースティックへのアクセスと全く同じです。
すべてのケースでこの様に動くとは限りませんし、USBをサポートしているすべてのデジタルカメラでも動かないかもしれないことに注意してください。
|
USBマウスを持っている場合はどのように表示されるでしょうか?HIDデバイスとして表示されるはずです。
コード表示 3.3: USBオプティカルマウス |
# dmesg | grep USB
drivers/usb/input/hid-core.c: v2.0:USB HID core driver
usb 1-1: new low speed USB device using address 2
input: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:07.2-1
|
USBポートの状態を見るために使える素晴らしいコマンドは、他にlsusbがあります。
これはsys-apps/usbutilsの一部で、次の章で紹介します。
4.
ユーザ空間のUSB
素晴らしいツール
これまでは、Linux上のカーネルあるいはシステム側にUSBに関するサポートがどれだけ存在するか見てきました。
さて、これからはユーザ空間でのUSBに関してGentooが提供しているサポートの種類をのぞいてみましょう。
最も役に立つツールの一つはlsusbです。
これは、システムに接続しているUSBデバイスをすべて一覧表示します。
インストールは簡単です。
コード表示 4.1: usbutilsのインストール |
# emerge usbutils
|
インストールすると、lsusbを実行してマシンに取り付けられているUSBデバイスの簡単な情報を入手できます。
注意:
たいていlsusbを実行する場合は、rootでなければなりません。
|
警告:
lsusbは、/proc/bus/usbからUSBデバイスの情報を読み込みます。
ここからの読み込みをカーネルで有効にしていない場合は、lsusbが全く動作しない可能性があります。
/procファイルシステムのサポートをカーネルで有効にしてあって、usbfsが/proc/bus/usbでマウントされていること(自動的にマウントされます)を確認してください。
|
コード表示 4.2: lsusbの動作 |
# lsusb
Bus 001 Device 003: ID 0c76:0005 JMTek, LLC. USBdisk
Bus 001 Device 002: ID 046d:c00e Logitech, Inc. Optical Mouse
Bus 001 Device 001: ID 0000:0000
|
あなたが大量の情報を見るのが大好きな種類の人なら、lsusb -vを実行するのもよいでしょう。
実行してみて、そのコマンドが出力するたくさんの情報をご覧ください。
またlsusbには、現在の物理的なUSB階層をツリー形式でダンプし、それによって正確なデバイスマップをより理解しやすくなるというオプションもあります。
これは、lsusb -tコマンドです。例えば、以下のような出力が得られます。
コード表示 4.3: lsusbによるUSB階層の表示 |
# lsusb -t
Bus# 1
`-Dev# 1 Vendor 0x0000 Product 0x0000
|-Dev# 2 Vendor 0x046d Product 0xc00e
`-Dev# 3 Vendor 0x0c76 Product 0x0005
|
lsusbとlsusb -tの出力は簡単にお互い関連付けることができます。
これはデバッグや、どのようにUSBが動作するかを理解するのに役に立ちます。
5.
謝辞
参考文献
このガイドを書くときにお世話になったオンライン文書はかなりたくさんあります。
その中のいくつかはとても専門的ですが本当に面白いものです。
すべて賞賛に値すると思いました。それではご覧ください!
その他の興味深いリンク
このドキュメントの内容は
Creative Commons -
Attribution / Share Alikeライセンスです。
|