Linux でカーネルモジュールがロードされているかどうかを確認する方法

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux でカーネルモジュールの状態を確認する方法を学びます。3 つの重要な方法を探ります。具体的には、lsmod を使用して現在ロードされているモジュールをリストアップする方法、modprobe --dry-run を使用してモジュールを実際にロードせずにロード可能かどうかとその依存関係を確認する方法、および modinfo を使用して特定のモジュールに関する詳細情報を表示する方法です。これらの技術は、どのカーネルコンポーネントがアクティブであるかを理解し、システム上のモジュール依存関係を管理するために重要です。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/SystemInformationandMonitoringGroup -.-> linux/ps("Process Displaying") linux/SystemInformationandMonitoringGroup -.-> linux/service("Service Managing") linux/PackagesandSoftwaresGroup -.-> linux/software("Linux Software") subgraph Lab Skills linux/echo -.-> lab-558721{{"Linux でカーネルモジュールがロードされているかどうかを確認する方法"}} linux/ls -.-> lab-558721{{"Linux でカーネルモジュールがロードされているかどうかを確認する方法"}} linux/ps -.-> lab-558721{{"Linux でカーネルモジュールがロードされているかどうかを確認する方法"}} linux/service -.-> lab-558721{{"Linux でカーネルモジュールがロードされているかどうかを確認する方法"}} linux/software -.-> lab-558721{{"Linux でカーネルモジュールがロードされているかどうかを確認する方法"}} end

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 カーネルにモジュールを追加または削除するために使用されます。古い insmodrmmod コマンドよりも高度で、モジュールの依存関係を理解します。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 <[email protected]>
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 システム上でカーネルモジュールを管理およびトラブルシューティングするための基本的なツールです。