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

起動時にLinuxカーネルモジュールをロードするシーケンスは何ですか?それらにどのように優先順位が設定されていますか?

それらの多くは起動時にロードされますが、起動時やその他の時点で自動的にロードされることはありません。これには、次の 3 つの異なるメカニズムがあります。

  • ユーザー空間リクエスト: これは、init サービスから udev、コマンドラインまですべてをカバーしています。起動時に特定のモジュールをロードしたい場合は、おそらく init または udev が最も簡単な手段です。

  • ホットプラグされたデバイス: USB や PCI などに何かを接続すると、カーネルがこれを検出し、デバイス自体の識別方法に基づいて適切なモジュールを要求します。

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

最後の 2 つは「モジュールをリクエストする」というフレーズを使用していることに注意してください。これは、カーネルがユーザー空間デーモン kmod を介して実際にロードされるためです。 /sbin/modprobe を実行します . Linux Kernel Architecture の Wolfgang Mauerer によると 、内部 request_module() を呼び出す 2.6 カーネルには ~100 の異なるポイントしかありません。 関数。

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


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

initrd の起動スクリプト (/linuxrc ) または initramfs (/init ) は通常、いくつかのモジュールをロードし、ルート ファイルシステムを見つけます。各ディストリビューションには独自のセットアップがあります。 Ubuntu は、initramfs-tools のコンポーネントから組み立てられた initramfs を使用します。 ルート ファイルシステムをマウントするために必要なドライバーに基づいて、カーネルごとにパッケージ化され、再生成されます。

ルートファイルシステムがマウントされた後、システムの起動中に /etc/modules にリストされているモジュール (Debian など) または /etc/modules.conf (Red Hat、Arch など) がロードされます。このファイルには、通常、いくつかのモジュールがリストされています。ほとんどのモジュールはオンデマンドでロードされます。

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

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


Linux
  1. Linux – Gnu / linuxでファイルパーミッションなどを設定するさまざまな方法は何ですか?

  2. Linux – Linuxでプロセスのプロセッサ親和性を設定するにはどうすればよいですか?

  3. Linux –カーネルモジュールを適切にリロードする方法は?

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

  2. 現在の Linux カーネル ソースは何ですか?

  3. Windowsスタートアップに相当するLinuxは何ですか?

  1. Linux –どのモジュールがカーネルを汚染しているかを判断する方法は?

  2. Linux pthreads でスレッドの名前を設定するには?

  3. Linux で優先ネットワーク インターフェイスを設定する方法