
insmod と modprobe には違いがありますか?
答え1
modprobe
モジュールを読み取ります/lib/modules/$(uname -r)/modules.dep.bin
(他のファイルが利用できない場合はサフィックスなし.bin
)。同じファイルから依存関係が読み込まれます。
modprobe
.ko
は、内のファイル名/lib/modules/$(uname -r)
(例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
.ko
ファイル名、またはサフィックスなしのファイル名を受け入れます/lib/modules/$(uname -r)
。
答え2
あたりman insmod
:
ほとんどのユーザーは、より賢く、モジュールの依存関係を処理できる modprobe を代わりに使用することを望むでしょう。
答え3
modprobe
はインテリジェントなコマンドで、モジュールをロードするときに依存関係を探します。他のモジュールで定義されたシンボルを持つモジュールをロードしたとします (このモジュール パスはメイン モジュール内で指定されます)。したがって、modprobe
メイン モジュールと依存モジュールがロードされます。
しかし、insmod
を使用すると、依存関係が読み込まれないため、 のようなコンパイル エラーが発生しますUnresolved symbols
。この場合、エラーを解決するには、依存モジュールを手動で探し、それらを読み込む必要があります。
答え4
modprobe コマンドは、より基本的な insmod および rmmod ユーティリティよりも多くの機能を提供します。modprobe は、Linux カーネルからモジュールをインテリジェントに追加または削除します。便宜上、モジュール名では _ と - に違いはありません (自動的にアンダースコアが変換されます)。modprobe は、/etc/modprobe.d ディレクトリ内のuname -r
オプションの設定ファイル (一部のディストリビューションでは代わりに /etc/modprobe.conf ファイルを使用します) を除くすべてのモジュールとその他のファイルをモジュール ディレクトリ /lib/modules/ で検索します。