はじめに
この実験では、Linux でカーネルモジュールの状態を確認する方法を学びます。3 つの重要な方法を探ります。具体的には、lsmod を使用して現在ロードされているモジュールをリストアップする方法、modprobe --dry-run を使用してモジュールを実際にロードせずにロード可能かどうかとその依存関係を確認する方法、および modinfo を使用して特定のモジュールに関する詳細情報を表示する方法です。これらの技術は、どのカーネルコンポーネントがアクティブであるかを理解し、システム上のモジュール依存関係を管理するために重要です。
lsmod でロードされているモジュールをリストする
このステップでは、lsmod コマンドを使用して現在ロードされているカーネルモジュールをリストする方法を学びます。
Linux カーネルはオペレーティングシステムの核心です。システムのリソースを管理し、ハードウェアとソフトウェアの間の橋渡しを行います。カーネルモジュールは、必要に応じてカーネルにロードおよびアンロードできるコードの断片です。システムを再起動することなくカーネルの機能を拡張することができます。これは、新しいハードウェアやファイルシステムのサポートを追加する場合に特に有用です。
現在カーネルにロードされているモジュールを確認するには、ターミナルを開き、次のコマンドを入力します。
lsmod
Enter キーを押します。
モジュールのリスト、そのサイズ、および他のモジュールがそれを使用している数が表示されます。出力は次のようになります(正確なリストはシステムとロードされているドライバによって異なります)。
Module Size Used by
fuse 143360 3
snd_seq_midi 20480 0
snd_seq_midi_event 16384 1 snd_seq_midi
snd_rawmidi 40960 1 snd_seq_midi
snd_seq 77824 3 snd_seq_midi,snd_seq_midi_event,snd_rawmidi
snd_seq_device 16384 3 snd_seq,snd_seq_midi,snd_rawmidi
... (many more lines)
各列を分解して説明しましょう。
Module: カーネルモジュールの名前。Size: モジュールのサイズ(バイト)。Used by: 現在このモジュールを使用している他のモジュールの数。この数が 0 の場合、このモジュールは現在他のモジュールによって使用されていません。
このコマンドは、システム上でどのドライバとカーネルコンポーネントがアクティブであるかを理解するために不可欠です。
では、ターミナルで lsmod コマンドを実行してみましょう。
Continue をクリックして次のステップに進みます。
modprobe --dry-run でモジュールの状態を確認する
このステップでは、modprobe コマンドに --dry-run オプションを使用して、モジュールを実際にロードすることなく、そのモジュールがロード可能かどうかと、それが依存している他のモジュールを確認する方法を学びます。
modprobe コマンドは、Linux カーネルにモジュールを追加または削除するために使用されます。古い insmod や rmmod コマンドよりも高度で、モジュールの依存関係を理解します。modprobe でモジュールをロードしようとすると、要求されたモジュールが必要とする他のモジュールを自動的にロードします。
--dry-run オプションはテストに非常に便利です。このオプションを指定すると、modprobe は依存関係を解決し、モジュールがロード可能かどうかを確認するプロセスを実行しますが、実際にはモジュールをカーネルにロードしません。これにより、実行中のシステムに変更を加える前に、問題や欠落している依存関係がないかを確認できます。
一般的なモジュール、たとえばユーザー空間のファイルシステムでよく使用される fuse モジュールの状態を確認してみましょう。
ターミナルに次のコマンドを入力します。
modprobe --dry-run fuse
Enter キーを押します。
fuse モジュールとその依存関係が利用可能な場合、次のような出力が表示されることがあります。
modprobe: INFO: could not insert 'fuse': File exists
この出力は、fuse モジュールがすでにロードされている可能性が高いことを示しています(前の lsmod のステップで確認できます)。modprobe は、モジュールがすでに存在するため再度挿入できないと報告しています。--dry-run オプションは、モジュールがすでにロードされている場合でも依存関係のチェックを実行します。
モジュールがロードされていなくてロード可能な場合、出力は空になるか、ロードされるモジュールが表示されます。問題がある場合、modprobe はそれを報告します。
--dry-run を使用することは、システムの状態に影響を与えることなくモジュールのロードをテストする安全な方法です。
では、自分で modprobe --dry-run fuse コマンドを実行してみましょう。
Continue をクリックして次に進みます。
modinfo でモジュールの詳細を表示する
このステップでは、modinfo コマンドを使用して特定のカーネルモジュールに関する詳細情報を取得する方法を学びます。
lsmod はロードされているモジュールを表示しますが、modinfo はモジュールがロードされているかどうかに関係なく、モジュールファイルに関するはるかに詳細な情報を提供します。この情報には、モジュールの作者、説明、ライセンス、パラメータ、および依存関係が含まれます。
modinfo を使用して、再度 fuse モジュールを調べてみましょう。
ターミナルに次のコマンドを入力します。
modinfo fuse
Enter キーを押します。
fuse モジュールに関する包括的な出力が表示され、次のようになります。
filename: /lib/modules/5.15.0-113-generic/kernel/fs/fuse/fuse.ko
license: GPL
description: Filesystem in Userspace
author: Miklos Szeredi <miklos@szeredi.hu>
alias: devname:fuse
alias: char-major-10-229
alias: fs-fuse
depends:
retpoline: Y
intree: Y
name: fuse
vermagic: 5.15.0-113-generic SMP mod_unload modversions
sig_id: PKCS#7
signer: Ubuntu Kernel Module Signing Authority
sig_key: ...
sig_hashalgo: sha512
signature: ...
parm: max_user_bgreq:Maximum number of pending background requests (uint)
parm: max_user_cong_req:Maximum number of pending congested background requests (uint)
parm: max_user_inline_write:Maximum size of inline write data (uint)
いくつかの重要なフィールドを見てみましょう。
filename: ファイルシステム上のモジュールファイルのパス。license: モジュールが配布されるライセンス(例:GPL)。description: モジュールの機能の簡単な説明。author: モジュールの作者。depends: このモジュールが依存している他のモジュールのリスト。parm: モジュールの動作を変更するために、モジュールをロードする際に渡すことができるパラメータに関する情報。
modinfo は、モジュール関連の問題をトラブルシューティングするため、または単に Linux カーネルのコンポーネントについて詳しく学ぶための非常に有用なツールです。
では、自分で modinfo fuse コマンドを実行して、fuse モジュールの詳細を確認してみましょう。
Continue をクリックしてこの実験を終了します。
まとめ
この実験では、Linux でカーネルモジュールの状態を確認する方法を学びました。まず、lsmod コマンドを使用して現在ロードされているすべてのカーネルモジュールをリストし、モジュール名、サイズ、使用回数を示す出力列を理解しました。
次に、modprobe コマンドに --dry-run オプションを使用して、モジュールを実際にロードすることなく、モジュールのロードをシミュレートし、その依存関係を特定しました。最後に、modinfo コマンドを使用して、特定のカーネルモジュールに関する詳細情報(説明、作者、ライセンス、パラメータなど)を表示する方法を学びました。これらのコマンドは、Linux システム上でカーネルモジュールを管理およびトラブルシューティングするための基本的なツールです。



