2

私はLinuxカーネルを初めて使用し、RAMにロードされた時点からLinuxカーネルの起動を理解しようとしています.LinuxイメージがRAMにロードされた後、制御がこのイメージにどのように渡されるか、必要なパラメータは何を渡す必要があるかを知りたいです.パラメータを渡さずに Linux イメージに制御を渡すことはできますか?

「bootm.c」を使用して UBOOT コードを調べていますが、制御が Linux イメージに渡される場所を理解できず、どの関数がそれを担当しているかを理解できません。

load_zimage() は、コントロールを渡す責任があります/

誰かが私を正しい方向に導いたり、x86 アーキテクチャから起動する Linux のこの特定の部分に関するいくつかの優れたチュートリアルを提案したりできますか?

4

1 に答える 1

2

依存していると思います。さまざまな種類の CPU アーキテクチャで、さまざまな方法を使用して情報を Linux カーネルに渡します。もちろん、Linux カーネルはブートローダー パス情報がなくても正常に起動できますが、ルート デバイス名、コンソール デバイス、メモリ サイズ、および有効化/無効化するパラメータなど、Linux カーネルで正しく静的に設定する必要があります。 Linux カーネルのいくつかの機能。

ブートローダがLinuxカーネルに様々な情報(パラメータ)を渡す必要がある理由は、柔軟な考察だと思います。このケースを考えてみてください。1 つの Linux カーネルを 2 つのボードで同じ CPU を使用して共有することができますが、周辺モジュールは異なります。

UBoot が情報を Linux カーネルに渡す例をいくつか示します。

(1) PowerPC CPU の場合、最近では DTB (Device Tree Blob) ファイルを使用して UBoot から Linux カーネルに詳細情報を渡します。UBoot と DTB をファームウェアと見なし、Linux カーネルでは、1 つのオープン ファームウェア (OF) インフラストラクチャを採用しています。UBoot の「bootm」コマンドをご存知かもしれませんが、bootm には 3 つのパラメータを指定できます。1 つ目は uImage アドレス、2 つ目は initrd アドレス、3 つ目は dtb アドレスです。

(2) 以前は、bootargs を使用して Linux カーネルに情報を渡していました。また、UBoot には gd/bd 構造があり、Linux カーネルに情報を渡すこともできます。ただし、この方法で渡される情報は制限されており、DTB とは異なります。

上記の情報があなたの質問を理解するのに役立つことを願っています.

于 2013-03-29T00:43:30.923 に答える