USB を Linux で使うためのページです。また番外編として、VAIO Z505DX でサウンドを鳴らす TIPS もあります。
【はじめに】
Linux における USB サポートは、まず、Inaky さんを中心に uusbd というプロジェクトが始まりました。その後、今年3月になって Linux の生みの親 Linus さんが独自のシンプルなコードを書き、公開しました。uusbd が比較的複雑なシステムであったため、見通しが悪かったためです。Linus さんのコードに共鳴するハッカーは急速に増え、わずか2カ月で、ついにカーネル 2.2.7 ac2 からソースに組み込まれるようになりました。
現時点では、安定版カーネル(2.2.x)ではちょっとした細工をしないと USB ドライヴァを組み込めません。また、開発版カーネル(2.3.x)はかなり新しい機能が付加されています。このページでは、できるだけ最新情報をキープすることで、USB デバイスを Linux で動作させる方法をお伝えしていきます。
ちなみに筆者の手元にある USB 搭載の Mac 機は G4/450(sawtooth)です。いくつかのカーネルをビルドしてみたところ、特段の問題もなくマウス、キーボードが動きます。一方、i386 系マシンのテスト環境としては、SONY VAIO Z505DX を使っています。USB のコントローラには、大きく2種類あります。OHCI と UHCI です。Mac 機は OHCI を使っています。一方、VAIO Z505DX では UHCI を使っています。このページでは、OHCI についても極力、最新情報を盛り込んでいきます。
【動作確認例】 どしどし情報をお寄せください。
【安定版カーネル(2.2 系)を利用する場合】last update 001018
○使用カーネル:2.2.17pre1
○ステータス:動く
○修正履歴:(990524) depmod を modprobe に。plug & Play の注意点。
(990623)カーネルのバージョンアップ。 日下さんのパッチを追記。
(000129)対象カーネルのバージョンアップ。デヴァイス名等見直し。
(000703)対象カーネルのバージョンアップ等。
(001018)typo 修正、/etc/modules.conf の設定追加。
以後、起動するたびに、USB マウスを認識させる(USB 関係のモジュールをカーネルにロードする)ために「modprobe usb-uhci」(OHCI なら「modprobe usb-ohci」)を実行します。動作を自動化するために、/etc/rc.d/rc.local 等に上記コマンドを書き入れておいてもよいでしょう。
もし modprobe usb-* をやっても USB が認識されていないようでしたら、BIOS で「プラグ&プレイ OS サポート」をオフにしてください。私の場合、VAIO 505RX では、これをオフにしないとうまくいきませんでした(Alan Cox さんから教えてもらいました)。DX では大丈夫です。
日山一明氏が、VAIO-505X/EX 用の USB ドライヴァへのパッチを作成されました(日山さん、ご連絡ありがとうございます)。URL はこちらです。かかい@えんとろぴー氏によれば、このパッチによって Let's Note CF-A44 でも動くようになったとのことです。
次に X での設定例をご紹介します。USB マウスだけを利用するのであれば、/etc/X11/XF86Config の中の「Section "Pointer"」のところで、「Protocol "PS/2"」(カーネル 2.2.7 でしたら、ここは Busmouse ですが、その後、PS/2 プロトコルに変わりました。さらに、「IMPS/2」をチョイスしたほうがいい場合もあるかも知れません)、「Device "/dev/usbmouse」とすればよろしいです。
一方、外付け USB マウスと内蔵のポインティング・デヴァイスを同時に使いたい場合は、2つの方法があります。一つは、gpm を使う方法。もう一つは、X の Xinput 機能を使う方法。ここでは、後者について解説します。
まず、XFree86Config の「Section "Pointer"」で内蔵ポインティング・デヴァイスの設定を行います。たとえば私の VAIO Z505DX の場合、「Protocol "GlidePointPS/2"」「Device "/dev/psaux"」です。
そして USB マウスの設定は、XFree86Config に以下のように書き加えます。
Section "Xinput"
SubSection "Mouse"
DeviceName "Second Mouse"
Protocol "PS/2"
Port "/dev/usbmouse"
ZAxisMapping 4 5 #スクロールマウスの場合
Buttons 5 #スクロールマウスの場合
AlwaysCore
BaudRate 1200
EndSubSection
EndSection
以上が終わったら、おもむろに X を立ち上げてみてください。どうですか。内蔵デヴァイスと外付け USB が同時に使えているでしょう。
【安定版カーネルに開発版の USB ドライヴァを組み込む場合】last update 001003
○使用カーネル:2.2.17pre1 + usb-2.4.0-test2-pre2-for-2.2.16-v3.diff
○ステータス:動く
安定版に組み込まれている USB ドライヴァは仕様が古く、ほとんどメインテナンスされていません。このため、開発版の USB ドライヴァを安定版のカーネル・ツリーに移植する(バック・ポート)ためのパッチが Linux ディストリビュータ SuSE から出ています。
00/07/03 時点では、2.4.0-test2-pre2 のドライヴァを 2.2.14〜16 にバックポートするパッチが存在します。当方でテストしてみた結果、これは 2.2.17 preX でも適用できます。ご存じの通り、2.2.16 には致命的なバグが存在するようですので、2.2.17 pre1(2.2.16 リリース直後に登場)以降を使うほうがよろしいでしょう。
カーネルのビルド、インストールにつきましては、開発版カーネルの項をご参照ください。
【最新安定版カーネル(2.4 系)を利用する場合】last update 010105
○使用カーネル:2.4.0
○ステータス:動く
開発版カーネル(最新安定版 2.4 系カーネル)では、linux/arch/i386/config.in をいじらなくても make *config で USB 関係の設定が出てきます。設定の仕方等については、【安定版カーネル】の項を参考にしてください。ただし、開発版カーネルは恐ろしく不安定で頻繁に状態が推移しますから、腕に覚えのない方はいじらないほうがいいかもしれません。このコーナーでは、Linux-USB ML で交わされた情報なども極力、盛り込むつもりではおりますけど ;)。なお、以下の記述では、Suka-Kan 氏から頂戴したメールを参考にしております。
開発版カーネルでは、どの辺のヴァージョンからだったかは失念致しましたが、少なくとも 2.3 系の最終版とされる 2.3.51 以降では動きます。2.4 での仕様がフィクスされたようですから少々、ご説明いたします。
カーネルのコンフィギュレーション「USB support」が、安定版に比べて飛躍的に項目数が増えています。私の場合、次の項目が ON または M(モジュール)になっています。
コンフィギュレーションを終えたら、make dep clean bzImage modules modules_install の順で構築。bzImage と System.map 所定の場所に納めてから /etc/lilo.conf を適当にエディットして lilo を走らせます。
(この項の作業は、最新の modutils をインストールした場合は、必要ないはずです)
depmod、modprobe を有効にするために、/etc/modules.conf ファイルを修正する必要があるかも知れません。このファイルに「keep(必要に応じて)」「path[usb]=/lib/modules/`uname -r`」を追加してください(以上の設定は、環境によりますので、man depmod 等で必要なファイル、設定法を調べてください)。
続いて再起動。USB のデヴァイス・ファイルのメジャー番号に変更がありましたので、新たに作成します。マウスに関しては「Major 13, Minor 32」から始まります。具体的には、私は安定版と共存させるために、「maknod /dev/usb/usbmouse0 c 13 32」として、/etc/X11/XF86Config の Xinput セクションの port を「/dev/usb/usbmouse0」としました。
デヴァイス・ファイルの作成については、別解(こちらが正統かも知れません)もあります。マウスの入力信号をすべてミックスさせた「/dev/input/mice」を作る方法です。これは「Major 13, Minor 63」となりますので、「mknod /dev/input/mice c 13 63」として、これを使ってデヴァイスにアクセスするようにします。
(この項の作業は、最新の modutils をインストールした場合は、必要ないはずです)
モジュールの組み込み方も安定版と変わってきます。スクリプトでも書けば楽なのでしょうが、私は一つ一つ、modprobe しています。usb-uhci、hid、mousedev の順で組み込みましょう。
さあ、どうですか。動くようになりましたよね。お分かりにならない点等ありましたら、お気軽にメールでお問い合わせください。それに対処することで、他の一人でも多くのユーザのお役に立てれば、これほどの喜びはないからです。
【番外編:NM256AV チップでサウンドを鳴らそう】last update 010105
○使用カーネル:2.2.17、2.4.0
○ステータス:動く
現在のカーネル・ソースには、VAIO Z505DX 等で使われている NeoMagic 256AV チップ向けのサウンド・ドライヴァが組み込まれています。ちゃんと音が鳴りますので、まだ鳴らしていない方は、ぜひ鳴らしてみてください。
やり方は簡単。カーネルの再構築を行う際、メニューで「sound -> sound card support」「sound -> OSS sound modules」「sound -> NM256AV/NM256ZX audio support」をそれぞれ「m(モジュール)」にして、他のスイッチは全部「n」にします。これでビルド、インストールしてください。
もし、pcmcia カードを挿入した時にフリーズするのであれば、/etc/sysconfig/pcmcia 等(ディストリビューションによって異なります)の設定ファイルに、「PCIC_OPTS="cs_irq=11"」(この左辺もディストリビューションによって若干、異なります)と書き込んでみてください。
再起動後、安定版なら「modprobe nm256」、開発版なら「modprobe nm256_audio」で音が出るようになるはずです。ちなみに現状、VAIO Z505DX 上で、2.2.17 + pcmcia-cs-3.1.22 と、2.4.0 + pcmcia-cs-3.1.23 で、サウンド、pcmcia、イーサネット、スリープ等がほぼ完璧に動作していて、超快適です。世界の VAIO ファンの皆さまのご努力に深く感謝するばかりです。