起動時にLinuxカーネルモジュールがロードされる順序は何ですか?彼らの優先順位は何ですか?

起動時にLinuxカーネルモジュールがロードされる順序は何ですか?彼らの優先順位は何ですか?

動的にコンパイルされたLinuxカーネルモジュールがあります。スタートにどのように追加しますか?その中にはたくさんの.koファイルがあります/lib/modules。これらのモジュールをロードする優先順位をどのように設定できますか?

答え1

ほとんどは最終的に起動中にロードされますが、起動時や他の時点では自動的にロードされません。これが発生する可能性がある3つのメカニズムがあります。

  • ユーザースペース要求:これには、initサービスからudev、コマンドラインまですべてが含まれます。起動時に特定のモジュールをロードしたい場合は、Initまたはudevがおそらく最も簡単な方法です。

  • ホットスワップ可能なデバイス:USBやPCIなどに接続すると、カーネルはそれを検出し、デバイスが自分自身を識別する方法に応じて適切なモジュールを要求します。

  • 必須プロトコルまたはその他の実装:カーネルが何かを実行する必要があり(ファイルシステムの読み取りなど)、それを実行するための知識が不足していることがわかったら、モジュールを要求します。

最後の2つについては、「要求モジュール」というフレーズを使用しました。これは、Wolfgang Mauererによると、)ステートメントをkmod実行しているユーザー空間デーモンを介してカーネルが実際にロードされるためです。/sbin/modprobeLinuxカーネルアーキテクチャ2.6 カーネルには組み込み関数への呼び出しが約100request_module()しかありません。

modprobeインストールされたMODULE_ALIASのデータベースを使用します。これは、モジュールのソースコードに明示的に指定されるか、モジュールが提供するOEMデバイスIDのリストであるモジュールのMODULE_DEVICE_TABLEから派生します。

答え2

使用できるように多くのシステムが構築されています。initrdまたはinitramfs。これは、ブートローダーによってロードされ、ルートパーティションがマウントされる前にカーネルで使用できるファイルシステムイメージです。これにより、ルートパーティション(ディスクドライバ、ファイルシステムドライバ、デバイスマッパ、または論理ボリュームドライバなど)をマウントするために必要なドライバをモジュールにコンパイルし、initrd / initramfsからロードできます。

initrd(/linuxrc)またはinitramfs()/initの起動スクリプトは通常、いくつかのモジュールをロードしてルートファイルシステムを探します。各ディストリビューションには独自の設定があります。 Ubuntuはファイルシステムの初期化これはinitramfs-toolsパッケージのコンポーネントに組み込まれ、ルートファイルシステムのインストールに必要なドライバに基づいて各カーネルに対して再構築されます。

/etc/modulesルートファイルシステムがマウントされた後(Debian、...)、または(Red Hat、Arch、...)にリストされているモジュールがシステム起動中にロードされます。/etc/modules.confこのファイルには通常、複数のモジュール(存在する場合)が一覧表示されます。ほとんどのモジュールは要求に応じてロードされます。

カーネルが一部のハードウェアにドライバや他のコンポーネント(ネットワークプロトコルや暗号化アルゴリズムなど)がないことを検出すると、ロードモジュールを/sbin/modprobe呼び出します。ハードウェアドライバの場合、カーネルはハードウェアのPCI ID、USB ID、またはその他のシステム名をエンコードする名前を渡します。/lib/modules/$VERSION/modules.aliasこれらのシステム名をモジュール名にマップするテーブルがあります。テーブルdepmodはによって作成され読み込まれますmodprobe

ハードウェアデバイス用に手動でコンパイルされた追加のカーネルモジュールがある場合は、そのモジュールをここに配置し/lib/modules/$VERSION/locallocal存在しない場合はサブディレクトリの作成)、実行してdepmod -aエイリアスデータベースを再作成します。モジュールがカーネルが自動的に検出できない異常な機能に使用されている場合は、それをに入れて実行して/lib/modules/$VERSION/local依存depmod -a関係を分析し、モジュール名をに追加します/etc/modules

関連情報