Kmod: The Kernel Module Loader Kirk Petersen 翻訳: 中野武雄 (1999/4/23 based on 2.2.5) kmod は kerneld の代替となるシンプルな手法です。 kmod は request_module() の代替品と、 kmod と呼ばれるカーネルスレッドと からなります。カーネルがモジュールを要求すると、 kmod は目覚めて modprobe を execve() し、起動した modprobe に要求された名前を渡します。 /proc ファイルシステムがマウントされている場合には、カーネルが 呼び出す modprobe のパスを以下によって設定できます。 echo "/sbin/modprobe" > /proc/sys/kernel/modprobe 利用されていないモジュールを定期的に削除するには、以下のような 内容を root の crontab エントリに登録しておきましょう。 0-59/5 * * * * /sbin/rmmod -a kmod は単にモジュールをロードするだけです。 kerneld にはもっと 多くの機能がありました (ただし標準のカーネルでは、そのような 拡張機能は利用していませんでした)。 request_route のような機能が 必要な場合は、同様の手法をとることも可能ではあります。簡単な request_route 関数を呼び出したり、 kroute カーネルスレッドを送って その作業をさせたりできます。しかしこのような手法はできるだけ 使わないようにするべきだと思います (訳注: 例えば diald を使う)。 kerneld にはデバイスドライバの設定を保存する機能もありました。 これを modprobe にやらせるのは難しくありません。モジュールが アンロードされるとき、 modprobe は「ドライバごとの設定」の置き場所 (/proc/sys/driver/blah) を見に行ってデバイスドライバの設定を読み、 その内容をファイルに書いておくことができます。モジュールが再び ロードされたら、そのファイルを proc ファイルシステムの対応する 場所に cat し直せばよいのです。あるいは /etc/modules.conf に スクリプトを設定しておくこともできるでしょう。他にもユーザ領域で 実行できる手法はたくさんあります (個人的には /proc を使う方法が 好きです)。 kerneld はちゃんと動作しているのに、なぜ置き換えるの? - kerneld は SysV IPC を使っていますが、これは今ではモジュール化 できることになっています。また SysV IPC は醜いので、できれば 使いたくないのです (ええ、カーネルレベルではそうなんです)。 - kmod と kerneld は結局同じこと (modprobe の呼び出し) をします。 なら仲介者はいない方がいいですよね? - ipc/msg.c から kerneld 関連機能を削除すると、同ソースは 40% 小さくなるのです。 - kmod はカーネルが通常用いている機能を使ってエラーを通知します。 kerneld では Unix domain socket がモジュール化されていると 「鶏と卵問題」が生じていましたが、 kmod ではこれを避けることが できます。