カーネルモジュールはカーネルが動的にロードできるモジュール。ローダブルカーネルモジュール(LKM)ともいう。デバイスドライバなどで使われている。
現在カーネルが読み込んでいるモジュールを表示するにはlsmodまたは/proc/modulesを読めばいい。
[root@centos build]# lsmod
Module Size Used by
autofs4 24517 3
hidp 23105 2
rfcomm 42457 0
l2cap 29633 10 hidp,rfcomm
左から順に、名前、サイズ、いくつのプロセスから使われているか、依存しているモジュールを示す。
モジュールの情報を表示するにはmodinfoを用いる。
[root@centos build]# modinfo hidp
filename: /lib/modules/2.6.18-53.1.14.el5/kernel/net/bluetooth/hidp/hidp.ko
alias: bt-proto-6
license: GPL
version: 1.1
description: Bluetooth HIDP ver 1.1
author: Marcel Holtmann <marcel@holtmann.org>
srcversion: F6110A784FD4060F29C39C7
depends: bluetooth,l2cap
vermagic: 2.6.18-53.1.14.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
module_sig: 883f35047ced1a9eca829d098883c27112e81509d1eb0b292e3db5dedbf5a25709c45da76fbe43e09f7461c3ed59fa8fdfdd1649a3ea28dd2bf43f7de
モジュールをカーネルに組み込むにはinsmodまたはmodprobeを用いる。modprobeはinsmodより賢く依存関係を解決しながら読み込んでくれる。
モジュールをカーネルから開放するにはrmmodまたはmodprobe -rを用いる。上記と同様にmodprobeは賢く開放する。
依存関係は通常/lib/modules/<version>/modules.depに記述してあり、これはdepmodによって作られる。
modprobeは設定ファイル/etc/modprobe.confを参照する。このファイルは1行1命令で記述されていて、以下のような命令がある。
- alias : モジュールに別名を付ける。ワイルドカードも指定可能。ネストはできない。
- options :指定されたモジュールがmodprobeコマンドで指定されたとき、追加のオプションを指定する。
- install : 指定されたモジュールがmodprobeコマンドで指定されたとき実行されるスクリプトを記述する。この命令がある場合、modprobeはデフォルトの動作を行わない。命令には–ignore-installを含んでいることが多い。これをつけるとmodprobe.confのinstall命令を無視する。つまりこれを付けて再帰しないようにしている。
- remove : 上記と大体同じ。
モジュールは通常/lib/modules/<version>/ ディレクトリに格納されている。現在の動いているカーネルのヴァージョンを知るにはuname -rを用いる。