Linuxシステムにおいて、カーネルモジュールは、必要に応じてカーネルに動的に機能を追加する役割を果たします。
例えば、新しいハードウェアを追加した際、そのデバイスをカーネルが認識し、動作させるためにモジュールが必要です。
ここでは、カーネルモジュールの管理コマンドを詳細に解説します。
lsmod: ロードされているカーネルモジュールを一覧表示
lsmod
は、現在ロードされているカーネルモジュールを簡潔に一覧表示します。
表示される項目には、モジュール名、モジュールサイズ、使用回数があります。
これにより、システムで動作中のモジュールを把握できます。
使用例:
lsmod
結果例:
Module Size Used by
nls_utf8 16384 1
nls_cp437 20480 1
vfat 20480 1
ポイント:
Size
: モジュールのサイズ(メモリ使用量)Used by
: 他のモジュールやプロセスがそのモジュールを利用している数
modprobe: カーネルモジュールをロードまたはアンロード
modprobe
は、モジュールを動的にロード(挿入)またはアンロード(削除)するための主要なコマンドで、
依存関係のあるモジュールも自動で処理します。insmod
やrmmod
に比べて高機能で、依存関係の管理が容易です。
モジュールのロード:
sudo modprobe module_name
モジュールのアンロード:
sudo modprobe -r module_name
主なオプション:
-r
: モジュールの削除-v
: 詳細な出力を表示(ロード時の情報確認)-n
: 実際にはロードせずシミュレート
例:
無線ネットワークアダプターのドライバーモジュールをロードする場合:
sudo modprobe rtl8188eu
モジュール依存関係の解決:modprobe
は、依存関係がある場合でも適切にすべての関連モジュールをロード
またはアンロードしてくれるため、手動での管理が必要ありません。
insmod / rmmod: モジュールの手動挿入と削除
insmod
とrmmod
は、特定のカーネルモジュールを手動で挿入または削除する低レベルコマンドです。modprobe
が依存関係を自動で解決するのに対し、insmod
やrmmod
は依存関係を処理しません。
これは、手動でモジュールを管理する必要がある特殊な場合に使われます。
使用例:モジュールの挿入
sudo insmod /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/driver_name.ko
使用例:モジュールの削除
sudo rmmod driver_name
オプション:
insmod
はモジュールのファイルパスを指定して挿入します。rmmod
はモジュールを削除しますが、依存関係がある場合は失敗します。
使用例:
- 特定のドライバーモジュールをテストする際などに利用されます。
depmod: モジュール依存関係の生成
depmod
は、カーネルモジュールの依存関係を解析し、/lib/modules/$(uname -r)/modules.dep
というファイルを生成します。
modprobe
は、このファイルを使用して依存関係を解決します。
モジュールの更新やカーネルのバージョンが変更された場合には、
このコマンドで依存関係を最新の状態に保ちます。
使用例:
sudo depmod
カーネルのモジュールツリー全体の依存関係を再構築し、
これにより、modprobe
がモジュールの依存関係を適切に処理できるようになります。
設定ファイルとモジュールのブラックリスト化
カーネルモジュールの自動ロードやブラックリスト設定は、/etc/modprobe.d/
ディレクトリにある設定ファイルで管理します。
特定のモジュールを自動でロードしたくない場合、モジュールをブラックリストに追加します。
ブラックリスト化の手順:
/etc/modprobe.d/blacklist.conf
という設定ファイルを作成、または編集します。- 自動でロードしたくないモジュール名を記述します。
記述例:
blacklist module_name
この設定を追加することで、システム起動時に該当モジュールが自動的にロードされなくなります。
まとめ
Linuxカーネルモジュールの管理は、システムの柔軟性を高め、
ハードウェアやソフトウェアの問題を解決するのに役立ちます。lsmod
でモジュールの状態を確認し、modprobe
を使って依存関係を処理しつつモジュールを管理します。
また、insmod
やrmmod
はより細かい制御が可能で、depmod
によってモジュール依存関係を最新に保つことが重要です。
設定ファイルを使って、モジュールの自動ロードやブラックリストの設定も管理できます。