この特集のトップページへ
この回のトップページへ

Murasakiのしくみと使い方
 Murasakiは,/etc/rc.d/init.dディレクトリに用意されるmurasakiという起動スクリプトによって実行される。しかし標準でインストールされるmurasakiは,パス設定が環境にマッチしないことがほとんどで,動作しないだろう。そこで,murasakiファイルを編集する必要がある。

 /etc/rc.d/init.dディレクトリにあるmurasakiviなどのエディタで開くと,次の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を実行する時に,modprobe: command not foundというエラー表示が出る場合がある。この際には,vi /etc/murasaki/auto_setupとしてファイルを読み込み,modprobeと書かれている個所をフルパスで,/sbin/modprobeのように書き換えればよい。

 この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の使用中などにマウスを抜き差ししてもデバイスがなくなってしまい操作できなくなるという問題を回避する。


murasaki.preloadファイルには,本文で挙げたようにメモリ常駐させておきたいモジュール名が含まれており,エディタなどで追記することもできる。ただし,murasakiが実行される時には,自動的にauto_setupが実行され,murasaki.preloadが上書きされてしまうので,その際には,auto_setupを呼び出さないようにmurasakiファイルを変更する必要がある。

 このような手順により,カーネルがデバイスの抜き差しを認識すると,/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モジュールが読み込まれていることが確認できる。


Murasakiでは,モジュールの読み込みに成功すると高い音が,失敗すると低い音が鳴る。Windowsでもお馴染みの音に似ているだろう。

# /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に対応したデバイスドライバを「モジュールとして」用意しておくという点だけだ。

PREV 19/21 NEXT