連載
» 2018年12月28日 05時00分 公開

Linux基本コマンドTips(270):【 depmod 】コマンド――カーネルモジュールの依存関係リストを更新する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、カーネルモジュールの依存関係リストを更新する「depmod」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、カーネルモジュールの依存関係リストを更新する「depmod」コマンドです。

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コマンドの書式

depmod [オプション] [カーネルのバージョン]

※[ ]は省略可能な引数を示しています。





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は更新しない)


画面1 画面1 モジュールの依存関係リストを更新したところ
画面2 画面2 依存関係リストの更新をせず、処理内容だけを確認したところ


筆者紹介

西村 めぐみ(にしむら めぐみ)

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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。