Gentoo Logo

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アーキテクチャの概略

(Softwareは、デバイスドライバと同様に他の構成要素から構成されていますが、
簡単のために見せていません)

    + ----  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の様々な出力

(USB 1.1準拠のシステムです。UHCIだけに注目してください)

# lspci -v | grep USB
0000:00:04.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB (rev 01) (prog-if 00 [UHCI])

(USB 2.0準拠のシステムです。EHCIと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  --->

(USBマスストレージを選択するときにSCSIは自動的に有効になるでしょうが、
disk supportを有効にする必要があります)
---   SCSI support type (disk, tape, CD-ROM)
<*>   SCSI disk support

(それから階層を戻ってUSB supportへ入ってください)
USB support  --->

(これはルートハブであり、USBサポートに必要です。
これをモジュールとしてコンパイルしたい場合、usbcoreという名前になるでしょう)
<*> Support for Host-side USB 

(HCDを少なくとも一つ選択してください。自信が無ければ、すべて選択するとよいでしょう)
--- USB Host Controller Drivers 
<*> EHCI HCD (USB 2.0) support
< > OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support

(少し下に行くと、CDCとマスストレージの項目にたどり着きます)
< > USB Modem (CDC ACM) support
<*> USB Printer support
<*> USB Mass Storage support

(RTL8150のようなUSBネットワークカードを持っている場合、このオプションが必要になるでしょう)
USB Network Adapters  --->
    <*> USB RTL8150 based ethernet device support (EXPERIMENTAL)

(Prolific 2303のようなシリアル/USBコンバータを持っている場合、このオプションが必要になるでしょう)
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の出力

(利用可能なUSBポートにUSBメモリを挿して、それから…)
# dmesg | less

(デバイスはUSB1.1として認識され、アドレスが割り当てられます。
また、使っているHCDの種類が表示されます)
usb 1-1: new full speed USB device using uhci_hcd and address 2

(SCSIエミュレーションが自動的に始まります)
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)

(最近のカーネルではライトプロテクトはEXPERIMENTAL(実験的)コードになります)
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
(通常この時点で、/dev/sda1をマウントしてデバイスにアクセス可能です)

(デバイスの接続が切れたとき、システムもそれを認識します)
usb 1-1: USB disconnect, address 2

デバイスが接続されたりマウントされたりすると、通常のハードディスクのようにアクセスすることができます。 cpmvrmなどのよくある命令は正常に動作します。 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
(これはTranscend製のUSBメモリ(512MB)です)
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

lsusblsusb -tの出力は簡単にお互い関連付けることができます。 これはデバッグや、どのようにUSBが動作するかを理解するのに役に立ちます。

5.  謝辞

参考文献

このガイドを書くときにお世話になったオンライン文書はかなりたくさんあります。 その中のいくつかはとても専門的ですが本当に面白いものです。 すべて賞賛に値すると思いました。それではご覧ください!

その他の興味深いリンク



印刷

ページの更新日 2009年 11月 29日

この翻訳はすでにメンテナンスされていません。

要約: この文書は、Gentooシステム上でのUSBの設定や、同様に様々なUSBデバイスの設定を手助けします。

Shyam Mani
Author

池田 健吾
翻訳

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.