第6章 カーネルモジュールの管理

Linux デバイスドライバはカーネルモジュール形式 - 機能拡張のために動作中のカーネルにロード可能なオブジェクトファイル - で配布されます。現在カーネルにロードされているモジュールの一覧は lsmod コマンドで取得できます。モジュールは modprobe コマンドでロードし、modprobe -r コマンドで取り外すことができます。depmod コマンドは、手動で起動する必要はほとんどありませんが、利用可能なモジュール一覧の再生成 (例えば新しいモジュールをインストールした直後など) に使用することができます。

通常、起動時にデバイスが検出され必要なカーネルモジュールが udev によってロードされます。稀に、カーネルモジュールのロードをより細かくコントロールする必要のある人がいます。例えば、追加のパラメータをモジュールに渡したり、スタートアップ時にいくつかのモジュールをロードしたり、特定のモジュールがロードされないようにしたり、などです。

もし、udev で自動的にロードされないモジュールを、起動時にロードしたければ、そのモジュールを/etc/modulesに列挙することで、強制的にロードさせることも可能です。このファイルの各行ごとにモジュール名をスキャンし (各行に 1 モジュール) 、 modprobe でそのモジュールがロードされます。例えば、典型的な /etc/modules は次のように書かれています。

loop
sbp2

与えられたモジュールに対して有効なパラメータを知りたい場合は、modinfo コマンドを使います。以下に例を示します。

# modinfo loop
filename:       /lib/modules/3.2.0-2-686-pae/kernel/drivers/block/loop.ko
alias:          devname:loop-control
alias:          char-major-10-237
alias:          block-major-7-*
license:        GPL
depends:        
intree:         Y
vermagic:       3.2.0-2-686-pae SMP mod_unload modversions 686
parm:           max_loop:Maximum number of loop devices (int)
parm:           max_part:Maximum number of partitions per loop device (int)

ブートプロセスの初期段階でudevによってロードされるモジュールに特別な引数を渡すには、udevがモジュールのロードに使用する modprobe 用のカスタム設定ファイルを作らなければなりません。例えば、引数 atapi_enabled=1libata カーネルモジュールへ渡すには、以下の行を含む/etc/modprobe.d/localファイルを作成します。

options libata atapi_enabled=1

/etc/modprobe.d 内の設定ファイルには、任意の名前を使用でき、複数の options 行を同一ファイル内に記述できます。

時として、2 つの異なるモジュールが同じデバイスのサポートを宣言していることがあります。たいていの場合、2 つのやや異なるバージョンのデバイスが存在し、動作に異なるカーネルモジュールを要求していることが原因です。そのような状況では、udev が両方のカーネルモジュールをロードし、予期しない結果になります。この問題を避けるため、任意のモジュール (例えば tulip だとしましょう) のロードを防ぐには、任意のファイルを作成し、

blacklist tulip

と書いて、/etc/modprobe.d ディレクトリに配置します。modprobe の使い方や設定方法に関するより詳しい情報は、modprobe のマニュアルページ (man modprobe) を参照してください。