Linuxカーネルはモジュール形式で設計されています。起動時に、最小限度の常駐カーネルがメモリにロードされます。その後、ユーザーが常駐カーネルに存在しない機能を要求すると、カーネルモジュールは動的にメモリにロードされます。一定時間使用されない場合、モジュールはメモリから取り除かれることがあります。
モジュールの動的なロードをサポートするメカニズムは、kmodコマンドと呼ばれるカーネルスレッドです。モジュールは、必要になったときに初めてロードされます。カーネルがモジュールを要求すると、それと依存関係にあるすべてのモジュールがロードされます。
Red Hat Linuxには、10分ごとにすべての未使用のモジュールを取り除くcronタスクも含まれています。cronタスクは、/etc/cron.d/kmodファイルにあります。cronタスクの詳細についてはcron項第22章を参照してください。
インストールプログラムは、Red Hat Linuxをインストールする際、システムにあるハードウェアを調べます。一方、ユーザーは、システムの通常の使用形態と必ずロードすべきプログラムに関する情報を入力します。インストールプログラムは、この調査結果と入力された情報に基づいて、起動時にロードする必要のあるモジュールを決定します。そして、ユーザーには見えない形で動的ロードメカニズムが機能するようにセットアップします。カスタムカーネルを構築する場合は、それらのすべてを自分自身で決定することができます。
インストール後に、カーネルモジュールによるサポートを必要とするようなハードウェアを新規に追加する場合は、動的ロードメカニズムをセットアップする必要があります。通常、新しいハードウェアは、Kudzuが検出します。また、新しいドライバはモジュール設定ファイル/etc/modules.confを編集して組み込むこともできます。
たとえば、インストール時に、SMC EtherPower 10 PCIネットワークアダプタを組み込んだ場合には、モジュール設定ファイルには次の行があるはずです。
alias eth0 tulip |
インストール後に、同じネットワークアダプタをもう一枚インストールする場合は、/etc/modules.confファイルに次の行を追加します。
alias eth1 tulip |
カーネルモジュールとモジュール化可能なハードウェアの一覧(アルファベット順)は、オフィシャル Red Hat Linuxリファレンスガイドにあります。
一連のコマンドを使用して、カーネルモジュールの一覧表示、ロード、アンロードのどれかができます。別のモジュールを試してみたい場合、あるいはモジュールが正常にロードされているかどうか知りたい場合にこれらのコマンドは適しています。
/sbin/lsmodコマンドを実行すると、現在ロードされているモジュールの一覧が表示されます。
例 24-1. lsmodの出力例
Module Size Used by sr_mod 15264 0 (autoclean) mga 95984 1 agpgart 23392 3 nfs 79008 1 (autoclean) lockd 52464 1 (autoclean) [nfs] sunrpc 61328 1 (autoclean) [nfs lockd] autofs 11264 4 (autoclean) 3c59x 25344 1 (autoclean) ipchains 38976 0 (unused) ide-scsi 8352 0 scsi_mod 95104 2 [sr_mod ide-scsi] ide-cd 26848 0 cdrom 27232 0 [sr_mod ide-cd] usb-uhci 20720 0 (unused) usbcore 49664 1 [usb-uhci] |
例24-1で見ることができるように、lsmodは、現在ロードされている各モジュールのサイズ、使用カウント、参照モジュールなどを表示します。
カーネルモジュールをロードするには、/sbin/insmodコマンドを入力し、続いてカーネルモジュール名を入力します。デフォルトでは、insmodで/lib/modules/<kernel-version>/kernel/driversサブディレクトリからモジュールのロードが行われます。各タイプのモジュールにサブディレクトリがあります。たとえば、ネットワークインターフェイスドライバにはnetサブディレクトリがあります。カーネルモジュールの中には、モジュールに依存するものがあります—このようなカーネルモジュールがロードするには、最初に他のモジュールをロードする必要があります。このような依存性を解決するために、まずモジュールに依存するものをロードしてから希望のモジュールをロードするか、あるいは、コマンド/sbin/modprobeを入力し、続いてモジュール名を使用してモジュールをそれに依存するものと共にロードします。
たとえば、コマンド
/sbin/modprobe tulip |
は、tulipネットワークインターフェイスモジュールをロードします。
カーネルモジュールをアンロードするには、/sbin/rmmodコマンドを実行し、続いてモジュール名を入力します。rmmodユーティリティは、現在使用されておらず、使用中の他のモジュールと依存関係にないモジュールのみアンロードします。
たとえば、コマンド
/sbin/rmmod tulip |
は、tulipネットワークインターフェイスモジュールをアンロードします。
もう1つの便利なカーネルモジュールユーティリティはmodinfoです。/sbin/modinfoコマンドを使用して、カーネルモジュールに関する情報を表示できます。一般的な構文は次のようになります。
/sbin/modinfo [options] <module> |
オプションとして、モジュールの簡単な説明を表示する-dと、モジュールがサポートするパラメータを一覧表示する-pがあります。オプションの完全な一覧については、modinfo man page(man modinfo)を参照してください。