図1 カーネル・モジュールはカーネル空間で動作するプログラム
図1 カーネル・モジュールはカーネル空間で動作するプログラム
[画像のクリックで拡大表示]
図2 カーネル・モジュールの利用にはシステム停止の危険が伴う
図2 カーネル・モジュールの利用にはシステム停止の危険が伴う
[画像のクリックで拡大表示]

 カーネル・モジュールとは,通常のアプリケーション・プログラムのように「ユーザー空間」で動くのではなく,「カーネル空間」で動くタイプのプログラム・モジュールです(図1)。カーネル・モジュールの代表例は「デバイス・ドライバ」です。例えば,USBメモリーのようなストレージ関連のドライバや無線LANアダプタのドライバなど,多くのデバイス・ドライバはこのカーネル・モジュールの形で用意されています。

 カーネルに何か新しい機能を追加したいときには,カーネルのソースコードに機能を追加して再コンパイルする方法が一般的です。しかし,新しい周辺機器をLinuxマシンにつなぎたい場合,その都度デバイス・ドライバのソースコードをカーネルに組み込んで再コンパイルするのは大変骨が折れる作業です。

 こんなとき,デバイス・ドライバをカーネル・モジュールとして用意しておけば,カーネルの再構築をすることなく,かつ実行中にモジュールを追加したり外せるようになります。つまり,カーネル・モジュールとは,Linux OSの中核機能を取り外し可能にする「機能部品」のようなものと言えるでしょう。

 図1で示した通り,カーネル・モジュールは,ユーザー空間で動く一般のアプリケーションとは異なり,カーネル空間内でカーネル内のデータに直接アクセスできます。これはすなわちカーネル・モジュールが扱い方によっては大変危険なプログラムであることを示しています。もし,カーネル・モジュールにバグや不具合があると,カーネルの動作そのものが停止(カーネル・パニック)してしまう危険があるからです(図2)。特にシステムに標準で用意されていないカーネル・モジュールを外から持ってきて追加導入する際には細心の注意が必要です。

 カーネル・モジュールを読み込ませるには,「insmod」あるいは「modprobe」コマンドを使います。削除するには「rmmod」コマンドを使います。自分が使っているLinuxにどんなカーネル・モジュールが読み込まれているか知りたい人もいるでしょう。そういう場合には「lsmod」コマンドを使います。「/sbin/lsmod」のようにコマンドを実行すれば(root権限が必要),一覧が表示されます。