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