Linux Kernel 2.2 Documentation:
/usr/src/linux/Documentation/kmod.txt
kmod.txt
カーネルモジュールローダ kmod の解説
[プレインテキスト版]
- 原著作者: Kirk Petersen
- 翻訳者: 中野武雄
- バージョン: 2.2.0
- 翻訳日時: 1999/04/23
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 ではこれを避けることが
できます。
Linux カーネル 2.2 付属文書一覧へ戻る