5. 個別の設定を必要とするデバイス

デバイスのなかには、通常のようにデバイスとモジュールをエイリアスで 繋ぐだけでなく、さらにいくつかの追加設定を必要とするものがあります。 たとえば、以下のようなデバイスです。

5.1. char-major-10 : マウス、watchdog、random デバイス

ハードウェアデバイスは、通常、メジャー番号によって個別に認識されます。 たとえば、ftape は、char-major-27 です。 しかし、/dev には、キャラクタデバイスのメジャー 番号 10 (char major 10) を割り当てられているデバイスが各種大量に あります。該当するのは、以下のようなものです。

これらのデバイスは、単一のモジュールではなく、それぞれのデバイス ごとのモジュールによって制御されるので、これらの各種デバイス (misc.device)に関する kerneld の設定には、メジャー番号に加えて マイナー番号も使用されます。

  alias char-major-10-1 psaux     # For PS/2 mouse
  alias char-major-10-130 wdt     # For WDT watchdog

この機能を利用するには、カーネルのバージョン 1.3.82 以降が 必要です。それ以前のバージョンでは、kerneld にマイナー番号を 渡すことができないので、kerneld はどのデバイスをロードすべきか 判断できません。

5.2. SCSI ドライバのロード:scsi_hostadapter の設定

SCSI デバイスのドライバは、SCSI ホストアダプタのドライバ(たとえば、 Adaptec 1542)と、実際に使っている SCSI デバイスタイプごとのドライバ (たとえば、ハードディスク、CD-ROM、テープドライブなど)の両方から 成り立っていて、これらはすべてモジュール化できます。しかし、 たとえば、Adaptec のカードに接続した CD-ROM ドライブにアクセスしよう とする場合、カーネルと kerneld が認識するのは、SCSI CD-ROM のサポート のために sr_mod が必要だということだけです。 その CD-ROM がどのような SCSI コントローラに接続されているかは 認識しないので、どのモジュールをロードして SCSI コントローラを サポートすべきか分からないのです。

この問題を解決するには、/etc/conf.modules に SCSI ドライバモジュールの設定を書き込んで、多数ある SCSI コントローラ用のモジュールのうちどれをロードすべきか kerneld に 指示するようにします。その設定は、たとえば、以下のようになります。

  alias scd0 sr_mod               # sr_mod for SCSI CD-ROM's ...
  alias scsi_hostadapter aha1542  # ... need the Adaptec driver

こうした設定は、カーネルのバージョン 1.3.82 以降でないと機能しない ので注意してください。

上記設定が有効なのは、SCSI コントローラが一枚の場合だけです。 複数の SCSI カードがある場合、設定はもう少し複雑になります。

原則として、何らかの SCSI ホストアダプタが既にインストール されている場合、それ以外のホストアダプタ用ドライバを kerneld に ロードさせることはできません。両方のドライバを(モジュールではなく) カーネルに組み込んでしまうか、もしくは手動でロードする必要があります。

Tip: kerneld に複数の SCSI ホストアダプタをロードさせる方法がある ことはあります。James Tsiao が以下のようなアイデアを教えて くれました。

modules.dsp での依存関係を手書きで設定 し直せば、kerneld にふたつ目の SCSI ホストドライバを簡単にロード させることができます。次にように設定すればいいのです。

  /lib/modules/2.0.30/scsi/st.o: /lib/modules/2.0.30/scsi/aha1542.o

上記に設定により、kerneld は、st.o をロード する前に、aha1542.o をロードするようになります。 わたしの自宅のマシンの設定は上記と全く同じなのですが、テープ、 CD-ROM、その他汎用の SCSI デバイスを含む全 SCSI デバイスが 問題なく動いています。ただ、この設定の欠点としては、depmod -a コマンドではこうした依存関係を自動認識でき ないので、ユーザが手で設定を書き加える必要があることと、起動時に depmod -a を実行してはいけないことです。 とはいえ、一旦設定が終われば、kerneld は aha1542.o をまったく問題なく自動的にロードします。

注意すべき点として、上記テクニックが有効なのは、各種 SCSI デバイスがふたつの SCSI コントローラに接続されている場合 だけであるということです。たとえば、ハードディスクが ひとつのコントローラ上にあり、CD-ROM ドライブやテープ、 およびその他の汎用 SCSI デバイスが別のコントローラ上に ある場合だけです。

5.3. モジュールのロードだけでは不十分な場合:post-install

モジュールをロードしただけではデバイスが動かない場合があります。 例を挙げると、サウンドカードをモジュールとしてコンパイルした 場合、ボリュームを一定のレベルに設定しておくと便利です。しかし、 ここで問題となるのは、ボリュームを設定したとしても、再度モジュール をロードするとその設定が無効になってしまうことです。以下に Ben Galliart (<bgallia@luc.edu>) による便利なトリックを 紹介します。

試行錯誤の結果、 setmix パッケージ をインストール してから、以下の行を /etc/conf.modules に追加 する必要があることが分かりました。

  post-install sound /usr/local/bin/setmix -f /etc/volume.conf

上記設定の意味は、sound モジュールがロード された後、kerneld が post-install sound で始まる設定行で指示されたコマンドを実行するということです。 これによって、sound モジュールは、/usr/local/bin/setmix -f /etc/volume.conf という コマンドによって設定されます。

これは、他のモジュールを使う場合にも便利だと思います。たとえば、 lp モジュールを tunelp プログラムによって設定するには以下のようにします。

  post-install lp tunelp options

kerneld にこのオプションを認識させるには、kerneld のバージョン 1.3.69f 以降が必要です。

Note: この mini-HOWTO の以前のバージョンでは pre-remove オプションに ついて説明していました。これは、kerneld がモジュールを削除する 直前に、特定のコマンドを実行するために利用されるはずのもの でした。しかし、結局この機能は使い物にならなかったので、 利用しないよう呼びかけがあり、おそらく今後の kerneld のリリース からこのオプションは姿を消すでしょう。現在、モジュールの設定 方法全体が見直されているので、読者がこの文書を読む頃には、 システム上で違う設定が要求されているかもしれません。