initはmodprobeするデバイスをどのように決定しますか?

initはmodprobeするデバイスをどのように決定しますか?

私はネットワークブートプロジェクトのための完全にカスタマイズされたinitramfsを構築し、その過程で多くのことを学んでいますが、モジュールのロードについて少し混乱しています。

モジュールをロードするために使用できることはわかっていますが、modprobeロードするモジュールをどのように決定しますか?

私が今持っているのは、仮想ボックスでシェルが実行されているinitramfsです。ただし、lsmodモジュールがロードされていないとマークされます。私がすべきことは、initネットワークを設定できるように正しいネットワークモジュールをロードすることです。

modprobe e1000実際に正しいモジュールを読み込むと。

Ubuntuの起動プロセスを見ると、Ubuntuがどのようにロードするかを判断できませんe1000。私はそれが利用可能なすべてのネットワークカード用のドライバであると思いましたがmodprobe、そうしないようです。

UDEVがこれに関連していると思いますか?

答え1

modprobeを使用してモジュールをロードできることを知っていますが、ロードするモジュールをどのように決定しますか?

カーネルがカーネルに存在しない機能を要求するとき、カーネルモジュールデーモンkmod1execsはmodprobeモジュールをロードします。modprobe2 つの形式のいずれかに文字列を渡します。

  • Softdog や ppp などのモジュール名です。
  • char-major-10-30などのより一般的な識別子

そのため、リンクから貼り付けるのではなく、システムで見つけた内容を説明します。

cat /proc/modules- このコマンドはロードされたモジュールをリストし、そのリストはかなり大きいです。

これで、システムの起動中にすでに述べたように、kmodデーモンプロセスが実行されてmodprobeモジュールがロードされます。すでに説明した2つの方法でロードするモジュールを指定できます。汎用識別子を指定すると、エイリアスは/etc/modprobe.confそのエントリを探します。だから私の中には/etc/modprobe.conf次のようなエイリアスがあります。

alias eth0 tg3

そこで、次のコマンドを実行して、私のシステムにtg3が何であるかを確認しました。

-bash-3.2$ cat /proc/modules | grep tg3
tg3 139225 0 - Live 0xf8bd1000

次に、要求されたモジュールをロードする前に他のモジュールをロードする必要があるかどうかをmodprobe確認します。/lib/modules/version/modules.depこのファイルはdepmod -aモジュールの依存関係によって生成され、含まれます。

最後に、要求されたモジュールをロードする前に、まずすべての前提条件モジュールをカーネルにロードするためにmodprobe使用されます。モジュールの標準ディレクトリである[3]を指します。モジュールの位置について非常に愚かなことを目指していますが、モジュールの基本的な位置を知るには、依存関係を特定し、正しい順序でモジュールをロードする方法を知る必要があります。insmodmodprobeinsmod/lib/modules/version/insmodmodprobe

しかし、新しいハードウェアはどのように検出されますか?

                                    CPU特権リング

これらのリングは、オペレーティングシステムではなくCPUによって生成されます。すべてのオペレーティングシステムカーネルは、最高の特権レベルであるリング0で実行され、ハードウェアおよびCPUと直接通信できます。リング 1 と 2 は通常デバイスドライバで使用されます。 Ring 3は、ユーザースペースアプリケーション(メディアプレーヤー、Webサーバー、およびユーザーが直接通信できる他のすべて)のためのものです。デバイスドライバは、ユーザ空間アプリケーションとハードウェアの間の「ブリッジ」です。

Linuxカーネルは、すべてのコンピュータバスで変更と新しいハードウェアを継続的に検索します。バスで変化が検出された瞬間、魔法が始まります。

魔法

  1. ハードウェア情報をユーザースペース(SYSFS)にエクスポートする
  2. *ハードウェアが利用可能であることをユーザースペースツールに通知します(UEVENTおよびUDEVD)
    • はい、あなたの家は正しいです。 udevは魔法についてです:)*
  3. イベントを処理し、/ETC/UDEV/RULES.D/のルールと一致し、/DEVディレクトリ(UDEVDおよびUDEV)を入力します。
  4. デバイスドライバのロード(UDEV、MODPROBLE)
  5. ユーザー空間アプリケーションへの通知(D-BUS経由)

udevdはカーネルとすべてのudevシステムの間にあり、いくつかの重要な機能を実行するデーモンプロセスです(後で説明します)。 udevデーモン(udevd)は起動時に起動され、/etc/udev/rules.d/のすべてのルールを読み取り、解析し、udevで後で使用できるようにこれらのルールをメモリ(udevデータベース)に保存します。後で、udevd はカーネルドライバコアの uevent に対して netlink でリッスンを開始します。

引用する

関連情報