第 31章カーネルモジュール

Linuxカーネルはモジュール形式で設計されて います。起動時に、最小限度の常駐カーネル だけがメモリにロードされます。したがって、 ユーザーが常駐カーネルに存在しない機能を 要求すると、時々ドライバ と呼ばれる、 カーネルモジュール、が動的に メモリにロードされます。

インストール中、システムのハードウェアはプローブ されます。この調査とユーザーからの情報を基に して、インストールプログラムはブート時にロードする 必要があるモジュールを決定します。インストール プログラムは透過的に動的ロードメカニズムが機能 するようにセットアップします。

インストール後に、カーネルモジュールを必要とする ハードウェアを新しく追加する場合は、新しいハード ウェア用のカーネルモジュールがロードされるよう システムを設定する必要があります。新しいハード ウェアを装着してブートすると、Kudzu プログラムが作動して対応するハード ウェアであるか検出し、そのハードウェア用に モジュールを設定します。また、モジュールは、 モジュール設定ファイル、/etc/modules.conf を編集して手動で指定することもできます。

注意注意
 

X Window Systemのインターフェースを表示する のに使用されるビデオカードモジュールは XFree86パッケージの一部 であり、カーネルではありません。したがって、 この章は適用しません。

例えば、システムがSMC EtherPower 10 PCI ネットワークアダプタを装着する場合、 モジュールの設定ファイルには次の行が あります。

alias eth0 tulip

2枚目のネットワークカードがシステムに追加 され1枚目のカードと同一である場合、 /etc/modules.confに 次の行を付け加えます。

alias eth1 tulip

カーネルモジュールとモジュールでサポートされる ハードウェアのアルファベット順一覧は、 Red Hat Linux 参照ガイドでご覧ください。

31.1. カーネルモジュールのユーティリティ

modutilsパッケージが インストールされる場合、カーネルモジュールを 管理するための一連のコマンドが利用できます。 モジュールが正常にロードされているか確認したり、 新しいハードウェア用に別のモジュールを試すとき、 これらのコマンドを使用します。

コマンドの/sbin/lsmodは 現在、ロードされているモジュールを表示します。 例えば、

Module                  Size  Used by    Not tainted
iptable_filter          2412   0 (autoclean) (unused)
ip_tables              15864   1 [iptable_filter]
nfs                    84632   1 (autoclean)
lockd                  59536   1 (autoclean) [nfs]
sunrpc                 87452   1 (autoclean) [nfs lockd]
soundcore               7044   0 (autoclean)
ide-cd                 35836   0 (autoclean)
cdrom                  34144   0 (autoclean) [ide-cd]
parport_pc             19204   1 (autoclean)
lp                      9188   0 (autoclean)
parport                39072   1 (autoclean) [parport_pc lp]
autofs                 13692   0 (autoclean) (unused)
e100                   62148   1
microcode               5184   0 (autoclean)
keybdev                 2976   0 (unused)
mousedev                5656   1
hid                    22308   0 (unused)
input                   6208   0 [keybdev mousedev hid]
usb-uhci               27468   0 (unused)
usbcore                82752   1 [hid usb-uhci]
ext3                   91464   2
jbd                    56336   2 [ext3]

各行は、最初のコラムがモジュールの名前、 2番目のコラムがモジュールのサイズ、 3番目のコラムが使用回数です。

使用回数の後の情報はモジュールごとに少しづつ 異なります。モジュールの行に(unused) が表示された場合は、そのモジュール は現在使用されていません。モジュールの行に (autoclean)と表示 された場合は、そのモジュールはrmmod -a コマンドでオートクリーンすることができます。 このコマンドを実行すると、autocleanが付いたモジュール、 前回のautoclean作動から使用されていないモジュールの すべてがアンロードされます。デフォルトでは、Red Hat Linux は このオートクリーン実行を行ないません。

モジュール名が行末のカッコ内に表示された場合、 カッコ内のそのモジュールは、その行の最初の コラムに表示されているモジュールに依存します。 例えば、次の行で、

usbcore                82752   1 [hid usb-uhci]

hid と usb-uhci のカーネルモジュールは usbcore モジュールに依存します。

/sbin/lsmodの出力は /proc/modules表示からの 出力と同じです。

カーネルモジュールをロードするには、 /sbin/modprobeコマンドを入力し、その後に カーネルモジュール名を続けます。デフォルトでは、 modprobe /lib/modules/<kernel-version> /kernel/drivers/ サブディレクトリからモジュールのロードが行なわれ ます。ネットワークインターフェースドライバ用の net/サブディレクトリなどの ように、各タイプのモジュールにサブディレクトリが あります。カーネルモジュールのなかには、別の モジュールに依存するものがあります。つまり、 このようなモジュールがロードするために 他のモジュールがさきにロードされなければならないと いうことです。/sbin/modprobe コマンドはこれらの依存関係を確認し、指定された モジュールをロードする前にモジュールの依存関係を ロードします。

たとえば、以下のコマンドを入力したとします。

/sbin/modprobe hid

すべてのモジュール依存関係をロードし、 それからhidモジュールを ロードします。

/sbin/modprobeが実行する すべてのコマンドをスクリーンに表示するには、 -vオプションを使用します。 例えば、

/sbin/modprobe -v hid

次と似たような出力が表示されます。

/sbin/insmod /lib/modules/2.4.20-2.47.1/kernel/drivers/usb/hid.o
Using /lib/modules/2.4.20-2.47.1/kernel/drivers/usb/hid.o
Symbol version prefix 'smp_'

/sbin/insmodコマンドも カーネルモジュールをロードするため存在しますが これは依存関係を解決しません。したがって、 /sbin/modprobeコマンドを使用 することをおすすめします。

カーネルモジュールをアンロードするには、 /sbin/rmmodコマンドを 使用してその後にモジュール名を続けます。 rmmodユーティリティは 使用されていないモジュールと、使用中の他の モジュールが依存しないモジュールのみを アンロードします。

たとえば、以下のコマンドを入力したとします。

/sbin/rmmod hid

hidカーネル モジュールをアンロードします。

もう1つの便利なカーネルモジュールユーティリティは modinfoです。/sbin/modinfo コマンドを使用して、カーネルモジュールに関する 情報を表示できます。一般的なシンタックスは次のように なります。

/sbin/modinfo [options] <module>

オプションとして、モジュールの簡単な説明を表示する -dと、モジュールがサポートする パラメータを一覧表示する-pがあります。 オプションの完全な一覧については、modinfo の man ページ(man modinfo)を参照して ください。