本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、カーネルモジュールの依存関係リストを更新する「depmod」コマンドです。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、カーネルモジュールの依存関係リストを更新する「depmod」コマンドです。
「depmod」はカーネルモジュール(モジュール)の依存関係リストを更新するコマンドです。
モジュールとは、Linuxカーネルの機能の一部を、カーネル本体とは別にロード、アンロードできるように分離したサイズの小さいバイナリファイルです。多くの場合、ハードウェアにアクセスし、操作するためのドライバ部分がモジュールとなっています。
ドライバ自体をカーネルに組み込む古い方式では、ハードウェア構成を変更した場合に、カーネルの再構築が必要になります。現在では、ほとんどのドライバがモジュールとして提供されているため、ハードウェア構成変更後は、必要なモジュールをロードしてカーネルに組み込むだけで対応できるようになっています。
Linuxカーネルやモジュールが持つ機能やそれぞれが管理している値には、「シンボル」と呼ばれる識別子が付いています。「モジュールXにはシンボルa、b、cがあり、シンボルd、eを参照する」「シンボルdはモジュールYに、シンボルeはモジュールZにある」という場合、「モジュールXは、モジュールYとモジュールZに依存する」という関係になります。
depmodコマンドはシンボルを調べて、依存関係のリストを保存している「modules.dep」というテキストファイル(/usr/lib/modules/バージョン/modules.dep)を更新します(※1)。
※ Ubuntu 18.04.1 LTSの場合、/usr/lib/modules/バージョン/modules.depを更新する。
depmod [オプション] [カーネルのバージョン]
※[ ]は省略可能な引数を示しています。
短いオプション | 長いオプション | 意味 |
---|---|---|
-a | --all | 全てのモジュールを調査する(デフォルト) |
-A | --quick | modules.depよりも新しいモジュールだけを調査する |
-e | --errsyms | 不足しているモジュールがあったら表示する(-Eオプションまたは-Fオプションが必要) |
-C ファイル | --config=ファイル | 設定ファイルを指定する(デフォルトは「/etc/modprobe.conf」または「/etc/modprobe.d/」) |
-b ディレクトリ | --basedir=ディレクトリ | モジュールのディレクトリを指定する(デフォルトは「/lib/modules/カーネルのバージョン/」) |
-F ファイル | --filesyms=ファイル | チェックに使用するカーネルの「System.map」ファイルを指定する(「/usr/src/kernels/バージョン/System.map」など)※2 |
-E ファイル | --symvers=ファイル | チェックに使用する「Module.symvers」ファイルを指定する(「/usr/src/kernels/バージョン/Module.symvers」など)※2 |
-n | --show,--dry-run | 依存関係リストを記録する「modules.dep」ファイルは更新せず、情報を画面(標準出力)のみに出力する |
-w | --warn | 依存関係やシンボルに重複があったら警告を出力する |
-v | --verbose | 詳しいメッセージを表示する |
※2 「-E」と「-F」は同時に指定できない。
「depmod」を実行すると、モジュールの依存関係リストが保存されている「modules.dep」ファイル(/usr/lib/modules/バージョン/modules.dep)を更新します(画面1)。実行にはroot権限が必要です(連載第68回)。
この操作は通常、必要ありません。しかし、モジュールファイルの追加や削除、入れ替えなどで、依存関係がおかしくなっている可能性がある場合には実行します。新しく追加したモジュールだけを反映させる場合は「-A」(--quick)オプションを付けて実行します。
いずれの場合も、実行結果は画面に表示されません。処理内容を確認したい場合は「-v」(--verbose)オプションを使用するとよいでしょう。
内容を確認するだけで、依存関係リストのファイルを更新しないでよい場合は「-n」(--show)オプションを使用します。この場合は一般ユーザーでも実行できます。画面2ではheadコマンドで実行結果の冒頭部のみを表示しています。
処理対象となるのは、「/usr/lib/modules/バージョン/」ディレクトリ下にあるモジュールです。「バージョン」部分は現在使用中のカーネルのバージョンで、unameコマンドを使って「uname -r」で確認できます。
異なるバージョンのmodules.depファイルを更新したい場合は、「depmod バージョン」のように、カーネルのバージョンを指定します。
depmod
(モジュールの依存関係リスト「modules.dep」を更新する)
depmod -A
(新しいモジュールだけを調査して依存関係リスト「modules.dep」を更新する)
depmmod -n
(依存関係リストを画面に表示する、modules.depは更新しない)
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.