この文書で紹介する kerneld というプログラムは、Bjorn Ekwall によって、 開発版カーネル 1.3 の配布当時に導入されました。kerneld を使うと、 デバイスドライバやネットワークドライバ、ファイルシステムなどの カーネルモジュールが必要に応じて自動的にロードされるようになります。 それゆえ、modprobe や insmod コマンドを使い、手動でモジュールをロードする必要がなくなります。
また、安定版カーネルには(今のところ?)組み込まれてはいませんが、 次のような面白い機能もあります。
初期設定のモニタ省電力プログラム(screen blanker)の代わりに、ユーザ プログラムを起動するように設定できます。つまり、どんなプログラムでもスクリーン セーバとして使うことができます。
上記モニタ省電力プログラムに関する機能と同様に、標準コンソールの ビープ音を全く違ったものに変更することができます。
kerneld は、次のふたつのコンポーネントから構成されています。
Linux カーネル空間からデーモンにリクエストを送り、特定のタスク処理 を担当するモジュールを呼び出させるカーネル機能。
カーネルからのリクエストを処理するために、どのモジュールをロード すべきか判断するユーザ空間デーモン。
kerneld の機能を働かせるには、両方のコンポーネントが動いて いなければなりません。片方だけの設定では不十分です。
kerneld を使うべき理由はいくつかあります。ここでは、著者自身が考える 理由を述べますが、他の人にとっては他の理由があるかもしれません。
ほとんど違いのない複数システムがあり、それらすべてのシステムのカーネル をビルドする必要がある場合、たとえばネットワークカードだけが違うと いった場合に、別々に各システムのカーネルをビルドせずとも、単一のカーネル といくつかのモジュールをビルドするだけで済みます。
開発者にとっては、モジュールのほうが、プログラムのテストがやり易く なります。ドライバのロードやアンロードをする場合でも、システムを 再起動する必要がありません。 これは、あらかじめ kerneld がロードしたモジュールだけでなく、 すべてのモジュールについて言えることです。
カーネルが使うメモリを節約できるので、アプリケーションにより多くの メモリをまわせます。カーネルが使うメモリは「絶対に」スワップアウト されないので、もし使用しないドライバをカーネルに組み込んで、それが 100Kb あったとすると、その分だけ RAM を無駄遣いしていることになります。
著者が使っている ftape フロッピーテープドライバや iBCS などは、 モジュールとしてのみ提供されているのですが、それらのモジュール を必要とするたびに毎回ロードやアンロードをする手間を省けます。
Linux ディストリビューションの作成者は、あらかじめ 284 通りのブート イメージを作成せずとも、個々のユーザが手持ちのハードウェアに応じて ドライバをロードできるようになります。現在の Linux ディストリビューション では、ハードウェアを検出して、実際に必要なモジュールだけをロード するようになっています。
とはいえ、読者が kerneld を使いたくない事情というのもあるでしょう。必要 なすべてのドライバを組み込んだ単一のカーネルイメージのほうがいい場合は、 他の文書をあたってください。
Linux カーネルでの kerneld サポートは、カーネル 1.3.57 で導入されました。 もしそれ以前のカーネルバージョンを使っている場合、kerneld 機能を有効に するにはカーネルのアップグレードが必要です。最新版の Linux カーネル ソースは以下のサイトから入手できますが、Linux FTP アーカイブサイト ならたいていどこででも手に入ります。
ユーザ空間デーモンは、modules パッケージに 同梱されています。通常これらはカーネルソースと同じ場所に置かれて います。
Note: 最新版カーネルでモジュールの自動ロードを利用しようとしている場合は、 なるべく新しい modutils パッケージを 使い、modules パッケージは使わないでください。 その際は、必ずカーネルソース付属の Documentation/Changes ファイルをチェックして、 お使いのカーネルイメージが必要とするパッケージがどのバージョン以降 なのかを確認してください。また、FAQ に記述した、モジュールと 2.1 カーネルでの問題についてもご覧 ください。