web-dev-qa-db-ja.com

insmodとmodprobeの違いは何ですか?

Insmodとmodprobeに違いはありますか?

35
NES

man insmodごと:

ほとんどのユーザーは、代わりにmodprobeを使用したいと思うでしょう。これはより賢く、モジュールの依存関係を処理できます。

28
8128

modprobeは、/lib/modules/$(uname -r)/modules.dep.binからモジュールを読み取ります(他のファイルが使用できない場合は、.bin接尾辞なし)。同じファイルから、依存関係がロードされます。

modprobeは、/lib/modules/$(uname -r).koファイルの名前(たとえば、nvidia-currentdkms/nvidia-current.ko)とエイリアス(modules.alias.bin)を受け入れます。ビルトイン(modules.alias.bin)も認識されますが、これらのモジュールはデフォルトでロードされるため、この種のモジュールをmodprobすることに意味はありません。

insmod一方、ファイルへのパスを受け入れます。モジュールは/lib/modules/$(uname -r)に存在する必要はありませんが、依存関係は自動的にロードされません。これは、modprobeがモジュールをロードするために使用する下位プログラムです。

モジュールに関連する他のプログラムは、rmmodおよびmodinfoです。

rmmodは、/proc/modulesから名前に基づいてカーネル名を削除します。この名前は、必ずしもmodprobeに渡される名前と同じである必要はありません(nvidia-currentファイルの場合、これはたとえばnvidiaです)。

modinfoは、ファイル名、または/lib/modules/$(uname -r).koサフィックスのないファイル名を受け入れます。

38
Lekensteyn

modprobeはインテリジェントなコマンドであり、モジュールのロード中に依存関係を探します。他のモジュールで定義されたシンボルを持つモジュールをロードしたと仮定します(このモジュールパスはメインモジュール内にあります)。したがって、modprobeはメインモジュールと依存モジュールをロードします。

ただし、insmodを使用すると、依存関係が読み込まれないため、Unresolved symbolsなどのコンパイルエラーが発生します。この場合、エラーを解決するために、依存モジュールを手動で探し、それらをロードする必要があります。

3
Shalini Guleria

Modprobeユーティリティは簡単に言及する価値があります。 modprobeは、insmodと同様に、モジュールをカーネルにロードします。カーネルで現在定義されていないシンボルを参照するかどうかを確認するために、ロードされるモジュールを見るという点で異なります。そのような参照が見つかった場合、modprobeは現在のモジュール検索パスで、関連するシンボルを定義する他のモジュールを探します。 modprobeがそれらのモジュール(ロードされるモジュールに必要)を見つけると、それらもカーネルにロードします。代わりにこの状況でinsmodを使用すると、コマンドは失敗し、システムログファイルに「未解決のシンボル」メッセージが残されます

0
user487054