GNU/Linux >> Linux の 問題 >  >> Linux

insmodとmodprobeの違いは何ですか

開発中、通常は insmod を使用してモジュールをロードし、ロードするモジュールのパスを指定する必要があります:

$ insmod filename [module-options]

これは、他のモジュール ローディング メソッドのベースを形成するモジュール ローディングの低レベル形式であり、この本で使用するものです。一方、主にシステム管理者または本番システムで使用される modprobe があります。 modprobe は、特定のモジュールをロードする前に、最初に依存関係をロードするために modules.dep ファイルを解析する巧妙なコマンドです。パッケージ マネージャーが行うように、モジュールの依存関係を自動的に処理します。

$ modprobe module-name
insmod modprobe
「insmod /path/to/module.ko」として指定されたモジュールをロードします /lib/modules/$(uname -r) にのみモジュールをロードします。 「modprobe /home/test/hello.ko」は機能しません
存在する場合、依存関係はロードされません modprobe は依存関係を計算し、依存関係をロードしてからメイン モジュールをロードします

modprobe はどのように依存関係を計算しますか?

Modprobe は、依存関係を計算するために depmod ツールに依存します。 depmod は、/lib/modules/$(uname -r) フォルダーに存在するすべてのモジュールの依存関係を計算し、依存情報を /lib/modules/$(uname -r)/modules.dep ファイルに配置します

例えば。 kernel/drivers/net/wireless/admtek/adm8211.ko:kernel/net/mac80211/mac80211.ko kernel/net/wireless/cfg80211.ko kernel/drivers/misc/eeprom/eeprom_93cx6.ko

この場合、eeprom_93cx6.ko、cfg80211.ko が最初にロードされ、次に adm8211.ko がロードされます

モジュールは右から左にロードされ、左から右に削除されます。そのため、adm8211.ko を削除している間に、cfg80211.ko、最後に eeprom_93cx6.ko が削除されます。 「depmod -a」コマンドを実行して、modules.dep ファイルを再ロードできます

まとめ

insmod は、モジュール ファイル名をカーネルにロードするためのシステム管理コマンドです。 modprobe コマンドよりも単純ですが、柔軟性は低くなります。 insmod からのエラー メッセージは曖昧な場合があります。これは、カーネルが内部でモジュール操作を実行し、エラー情報を標準出力ではなくカーネル ログに送信するためです。 dmesg を参照してください。

module.* ファイル内の情報は、コマンド modprobe によって使用され、完全なパスではなく名前でモジュールを検索します。 modprobe には、マニュアルに記載されている他の多くの機能があります。

モジュールの依存関係情報は、デバイス マネージャー、特に udev によっても使用されます。新しい USB デバイスなどの新しいハードウェアが検出されると、udevd デーモンが警告を受けてベンダーに渡され、製品 ID がハードウェアから読み取られます。 udevd は、モジュール依存関係ファイルをスキャンして、それらの ID を登録したモジュールを探します。見つかった場合は、modprobe を使用して読み込まれます。


Linux
  1. RedhatとcentOSの違いは何ですか?

  2. Linuxカーネルモジュールのmodule_initとinit_moduleの違いは何ですか?

  3. Cのstrtok_rとstrtok_sの違いは何ですか?

  1. fsck と e2fsck の違いは何ですか?

  2. 「su -」と「su --login」の違いは何ですか?

  3. unlink と rm の違いは何ですか?

  1. InnoDBとMyISAMの違いは何ですか?

  2. [[$ a ==Z*]]と[$a==Z *]の違いは?

  3. ミューテックスとクリティカルセクションの違いは何ですか?