☆ カーネルモジュールに関して ☆ 今までは, 「カーネルモジュール」というものがなんなのかさっぱり わかっていなかったため, 必要そうなものを全てカーネルに組み込んでいたのだが, パラレルポートプリンタを使用してみるにあたって多少「モジュール」に関して 勉強し, やっとその便利さに気づいた. ここにはその際のメモ書きを残す. ■ モジュールの組み込みに関して 今回は ・ Parallel port support (parport) ・ PC-style hardware (parport_pc) ・ Parallel printer support (lp) というパラレルポートプリンタを動かすのに必要なものを 全てモジュール化した. これらを例にしてモジュールについて簡単にメモ書きする. □ モジュール置き場 カーネルの構築の際に組み込み(*)と指定したものはカーネルに 組み込まれ, /boot/vmlinuz-2.*.* の中に取り込まれることになる. これに対し, モジュール化(M)としたものは, /lib/module/2.*.*/kernel/ 以下に置かれる事になる. 例えば Parallel port support (モジュール名 parport)は /lib/modules/2.4.18/kernel/drivers/parport/parport.o というモジュール形式のファイルになって格納されている. □ モジュールの組み込み, 取り外し モジュールの組み込みや取り外し, その他モジュール関係のコマンドは 以下のものである. ・ lsmod 組み込まれているモジュールの一覧を表示 ・ insmod ローダブルカーネルモジュールを組み込む ・ rmmod ローダブルカーネルモジュールを取り外す ・ modprobe ローダブルモジュールの高レベル管理ツール insmod, rmmod の2つはこのツール一つで カバーできる. ◆ モジュールの組み込み 単にモジュールを組み込む場合は以下のコマンドで組み込む. # insmod <モジュール名> # modprobe <モジュール名> ただし, modprobe はモジュール間の依存関係を調べ, 他の必要な 全てのモジュールも同時に組み込むので便利である. 以下のように -v オプションをつけるとどういったモジュールが 同時に読み込まれているか見ることができる. # modprobe -v <モジュール名> 例えば, lp モジュールは parport, parport_pc に依存しているため, modprobe を使うと他の2つも同時に組み込まれる. ◆ 組み込まれたモジュールを見る. 以下のように lsmod コマンドを使う事で組み込まれた モジュールを見ることが出来る. # lsmod ◆ モジュールの取り外し 組み込まれたモジュールを取り外すには以下のようにする. # rmmod <モジュール名> # modprobe -r <モジュール名> ただし, 取り外す場合, そのモジュールが使用中であったり 他のモジュールから依存されている場合は取り外せない. 使用中である場合は使用が終わってから, 依存されている場合はそちらのモジュールを先に取り外してから 取り外すこと. □ モジュールの自動取り外し insmod や modprobe のオプションに -k (--autoclean) という オプションがある. これは組み込まれたモジュールが一定時間(デフォルトは1分)使用され ない場合には自動的に取り外されるというものである. -k オプションをつけて読み込まれたものは lsmod で見た際に (autoclean) というオプションがついている. □ カーネルモジュールの自動読み込み カーネル構築の際に Loadable module support の Kernel module loader を有効にしておくと(デフォルトでは有効になっている), 必要な時に自動的にモジュールが読み込まれる. 例えば, パラレルポートプリンタで印刷したい場合には, lpr コマンドでそのプリンタを指定して印刷しようとすると, 自動的に parport, parport_pc, lp が読み込まれる. 実際にやってみて, lsmod で確認してみると良いだろう. □ モジュールを必ず読み込むようにするには カーネルを手動で組み込んだり, カーネルに判断させて自動的に 読み込ませる方法は前述したが, ユーザが読み込むモジュールを 指定して起動時に必ず読み込むようにする事も可能である. /etc/modules にモジュール名を書き込んでおくと, 起動時に 勝手に読み込まれる. 起動時のメッセージを読んでいると読み込まれているのがわかるだろう.