第37章 カーネルモジュール
Linux カーネルにはモジュール設計があります。システムの起動時に、最小の常駐カーネルのみがメモリーに読み込まれます。その後、ユーザーが常駐カーネルに存在しない機能を要求すると、ドライバー と呼ばれる カーネルモジュール は動的にメモリーに読み込まれます。
インストール時に、システムのハードウェアがプローブされます。このプローブとユーザーが提供する情報に基づいて、インストールプログラムは起動時に読み込む必要があるモジュールを決定します。インストールプログラムは、透過的に動作する動的ロードメカニズムを設定します。
インストール後に新しいハードウェアを追加し、ハードウェアにカーネルモジュールが必要な場合は、新しいハードウェア用に適切なカーネルモジュールを読み込むようにシステムを設定する必要があります。システムが新しいハードウェアで起動すると、Kudu プログラムは実行 さ れ、サポートされている場合は新しいハードウェアを検出し、そのハードウェアに対するモジュールを設定します。モジュールは、モジュール設定ファイル
/etc/modprobe.conf
を編集して手動で指定することもできます。
備考
X Window System インターフェースの表示に使用されるビデオカードモジュールは、カーネルではなく
xorg-X11
パッケージの一部であるため、本章は適用されません。
たとえば、システムに SMC EtherPower 10 PCI ネットワークアダプターが含まれている場合、モジュール設定ファイルには以下の行が含まれます。
alias eth0 tulip
2 つ目のネットワークカードがシステムに追加され、1 番目のカードと同じ場合は、以下の行を
/etc/modprobe.conf
に追加します。
alias eth1 tulip
カーネルモジュールのアルファベット順と、これらのモジュールでサポートされるハードウェアの一覧は、『『リファレンスガイド』』 を参照してください。
37.1. カーネルモジュールユーティリティー
module-init-tools
パッケージがインストールされている場合は、カーネルモジュールを管理するためのコマンドのグループを利用できます。これらのコマンドを使用して、モジュールが正常に読み込まれているかどうか、または新しいハードウェアの一部で異なるモジュールを試行するかどうかを決定します。
/sbin/lsmod コマンドは、現在読み込まれているモジュールの一覧を表示します。以下に例を示します。
Module Size Used by nfs 218437 1 lockd 63977 2 nfs parport_pc 24705 1 lp 12077 0 parport 37129 2 parport_pc,lp autofs4 23237 2 i2c_dev 11329 0 i2c_core 22081 1 i2c_dev sunrpc 157093 5 nfs,lockd button 6481 0 battery 8901 0 ac 4805 0 md5 4033 1 ipv6 232833 16 ohci_hcd 21713 0 e100 39493 0 mii 4673 1 e100 floppy 58481 0 sg 33377 0 dm_snapshot 17029 0 dm_zero 2369 0 dm_mirror 22957 2 ext3 116809 2 jbd 71257 1 ext3 dm_mod 54741 6 dm_snapshot,dm_zero,dm_mirror ips 46173 2 aic7xxx 148121 0 sd_mod 17217 3 scsi_mod 121421 4 sg,ips,aic7xxx,sd_mod
行ごとに 1 列目がモジュールの名前、2 列目はモジュールのサイズ、3 列目は使用カウントです。
/sbin/lsmod 出力は、
/proc/modules
の表示出力よりも詳細ではなく、読みやすくなります。
カーネルモジュールを読み込むには、/sbin/modprobe コマンドの後にカーネルモジュール名を使用します。デフォルトでは、modprobe は
/lib/modules/ <kernel-version> /kernel/drivers/ サブ
ディレクトリーからモジュールを読み込もうとします。各タイプのモジュールには、ネットワークインターフェースドライバーの net/
サブディレクトリーなど、各タイプのモジュールにサブディレクトリーがあります。一部のカーネルモジュールにはモジュールの依存関係があります。つまり、ロードするために他のモジュールを最初に読み込む必要があります。/sbin/modprobe コマンドは、これらの依存関係を確認し、指定されたモジュールを読み込む前にモジュールの依存関係を読み込みます。
たとえば、コマンドは以下のようになります。
/sbin/modprobe e100
モジュール依存関係を読み込み、次に
e100
モジュールを読み込みます。
/sbin/modprobe が実行したコマンドをすべて画面に表示するには、
-v
オプションを使用します。以下に例を示します。
/sbin/modprobe -v e100
以下のような出力が表示されます。
/sbin/insmod /lib/modules/2.6.9-5.EL/kernel/drivers/net/e100.ko Using /lib/modules/2.6.9-5.EL/kernel/drivers/net/e100.ko Symbol version prefix 'smp_'
/sbin/insmod コマンドもカーネルモジュールを読み込むため存在しますが、依存関係は解決されません。したがって、/sbin/modprobe コマンドの使用が推奨されます。
カーネルモジュールをアンロードするには、/sbin/rmmod コマンドの後にモジュール名を使用します。rmmod ユーティリティーは、使用されていないモジュールと、使用中の他のモジュールの依存関係ではないモジュールのみをアンロードします。
たとえば、コマンドは以下のようになります。
/sbin/rmmod e100
e100
カーネルモジュールをアンロードします。
もう 1 つの便利なカーネルモジュールユーティリティーは modinfo です。/sbin/modinfo コマンドを使用して、カーネルモジュールに関する情報を表示します。一般的な構文は以下のとおりです。
/sbin/modinfo [options]<module>
オプションには -d が含まれます。これにより、モジュールの簡単な説明が表示されます。-p は、モジュールがサポートするパラメーターを一覧表示します。オプションの完全なリストは、modinfo の man ページ(man modinfo )を参照してください。