Insmodとmodprobeに違いはありますか?
man insmod
ごと:
ほとんどのユーザーは、代わりにmodprobeを使用したいと思うでしょう。これはより賢く、モジュールの依存関係を処理できます。
modprobe
は、/lib/modules/$(uname -r)/modules.dep.bin
からモジュールを読み取ります(他のファイルが使用できない場合は、.bin
接尾辞なし)。同じファイルから、依存関係がロードされます。
modprobe
は、/lib/modules/$(uname -r)
の.ko
ファイルの名前(たとえば、nvidia-current
のdkms/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
サフィックスのないファイル名を受け入れます。
modprobe
はインテリジェントなコマンドであり、モジュールのロード中に依存関係を探します。他のモジュールで定義されたシンボルを持つモジュールをロードしたと仮定します(このモジュールパスはメインモジュール内にあります)。したがって、modprobe
はメインモジュールと依存モジュールをロードします。
ただし、insmod
を使用すると、依存関係が読み込まれないため、Unresolved symbols
などのコンパイルエラーが発生します。この場合、エラーを解決するために、依存モジュールを手動で探し、それらをロードする必要があります。
Modprobeユーティリティは簡単に言及する価値があります。 modprobeは、insmodと同様に、モジュールをカーネルにロードします。カーネルで現在定義されていないシンボルを参照するかどうかを確認するために、ロードされるモジュールを見るという点で異なります。そのような参照が見つかった場合、modprobeは現在のモジュール検索パスで、関連するシンボルを定義する他のモジュールを探します。 modprobeがそれらのモジュール(ロードされるモジュールに必要)を見つけると、それらもカーネルにロードします。代わりにこの状況でinsmodを使用すると、コマンドは失敗し、システムログファイルに「未解決のシンボル」メッセージが残されます