Murasakiは,/etc/rc.d/init.dディレクトリに用意されるmurasakiという起動スクリプトによって実行される。しかし標準でインストールされるmurasakiは,パス設定が環境にマッチしないことがほとんどで,動作しないだろう。そこで,murasakiファイルを編集する必要がある。
/etc/rc.d/init.dディレクトリにあるmurasakiをviなどのエディタで開くと,次の2つの行があるのを確認できる。
|
MURASAKI_HOTPLUG=/var/tmp/murasaki-0.4.0/sbin/hotplug.murasaki MURASAKI_PRELOAD=/var/tmp/murasaki-0.4.0/etc/murasaki/murasaki.preload |
この部分を,次のように書き換えればよい。
|
MURASAKI_HOTPLUG=/sbin/hotplug.murasaki MURASAKI_PRELOAD=/etc/murasaki/murasaki.preload |
編集後,murasakiを次のように実行すればよい。
| # /etc/rc.d/init.d/murasaki start |
|
このmurasakiという起動スクリプトは,Linuxが起動する時に自動実行するよう設定される。そのため,Linuxが起動するたびに上記コマンドを入力する必要はない。
ちなみに,Murasakiを停止するには次のように引数にstopをつけて実行すればよい。
| # /etc/rc.d/init.d/murasaki stop |
仕組みについても補足しておこう。murasakiスクリプトを実行すると,/proc/sys/kernel/hotplugに,/sbin/hotplug.murasakiが書き込まれる。この結果,カーネルがPCIデバイス(PCカード含む),ネットワーク,USBの各機器が抜き差しされた時に,/sbin/hotplug.murasakiが呼び出されるようになるのだ。
murasakiスクリプトはまた,/etc/murasaki/auto_setupも実行する。この/etc/murasaki/auto_setupは,現在組み込まれているモジュール一覧を,/etc/murasaki/murasaki.preloadファイルに書き込む作業を行うものだ。
/etc/murasaki/murasaki.preloadファイルは,Murasakiがデバイスのプラグ&プレイを検出しても,常にデバイスを読み込んだままにしておくモジュール名の一覧である。実際にmurasakiを実行後,/etc/murasaki/murasaki.preloadファイルをエディタなどで参照すると,次のような内容になっていることを確認できる。
|
mousedev hid usb-uhci |
上記の内容例を見ると分かるのは,USBコントローラ,キーボード,マウスの3つが選択されていることだ。これにより,キーボードやマウスを抜き差ししてもそのモジュールは解放されないことを意味しており,X Windowの使用中などにマウスを抜き差ししてもデバイスがなくなってしまい操作できなくなるという問題を回避する。
|
このような手順により,カーネルがデバイスの抜き差しを認識すると,/sbin/hotplug.murasakiファイルが呼び出されるようになる。このhotplug.murasakiファイルは,どの種類のデバイスが抜き差しされたのかによって,さらに次のファイルを呼び出す仕組みを持っている。
- PCIデバイス(PCカード含む)
murasaki.pci - ネットワークデバイス(PPPも含む)
murasaki.net - USB
murasaki.usb
今回は,USBのプラグ&プレイを実現することが目的なので,以下ではUSBに限って説明を続けよう。USBデバイスが抜き差しされると,murasaki.usbが呼び出されるが,この時どのモジュールを読み込むべきなのか(抜かれた場合には解放すべきなのか)をmurasaki.usbmapファイルから取得する。
よって,USB機器のプラグ&プレイを実現するためには,murasaki.usbmapファイルを編集し,利用するUSB機器とモジュールとの対応を書き加えなければならない。しかし,murasaki.usbmapには主要なUSB機器とモジュール名との対応表が書かれているので,実際には編集しなくてもほとんどの機器が利用できる。
例えば,Part2で紹介をしたUSBカードリーダを差し込むと,「ピッ」という周波数の高い音が鳴り,デバイスが認識される。この際,次のようにlsmodコマンドを実行すると確かにusb-storageモジュールが読み込まれていることが確認できる。
|
|
# /sbin/lsmod Module Size Used by usb-storage 21552 0 (unused) hid 12272 0 (unused) mousedev 4384 0 (unused) input 3744 0 [hid mousedev] |
USBカードリーダのケーブルを抜けば,次のようにusb-storageが解放されることが分かる。
|
# /sbin/lsmod Module Size Used by hid 12272 0 (unused) mousedev 4384 0 (unused) input 3744 0 [hid mousedev] |
このようにMurasakiをインストールして実行しておけば,ほとんどの場合自動認識される。設定しなければならない項目はほとんどない。
注意しなければならないのは,カーネル再構築で対象のUSBに対応したデバイスドライバを「モジュールとして」用意しておくという点だけだ。
| 19/21 |
