それは非常に基本的な質問かもしれませんが、私はこれを理解するのに本当に混乱しています.
ブート プロセスでデバイス ツリー dtb ファイルを必要としないボード (beagleboard など) もあれば、ブート プロセスで dtb ファイルが必要な Zynq などもあります。
この仮定は正しいですか?
また、起動プロセスで。ブートローダーが dtb ファイルを取得してロードするのはいつですか?
プロセス全体を知るための参照はありますか?
それは非常に基本的な質問かもしれませんが、私はこれを理解するのに本当に混乱しています.
ブート プロセスでデバイス ツリー dtb ファイルを必要としないボード (beagleboard など) もあれば、ブート プロセスで dtb ファイルが必要な Zynq などもあります。
この仮定は正しいですか?
また、起動プロセスで。ブートローダーが dtb ファイルを取得してロードするのはいつですか?
プロセス全体を知るための参照はありますか?
従来、各ボードの「ボード ファイル」(C 言語) を記述して、ボード上のどのコンポーネントがどのように接続されているかを記述する必要がありました。つまり、手続き記述です。
デバイス ツリーでは、宣言型アプローチを使用して HW を記述し、カーネルに適切なデバイス登録関数を呼び出させます。
そのため、古いボードの場合、ボード ファイルが使用可能な場合 ( arch/arm/mach-omap2/board-omap3beagle.c
Beagleboard の場合)、デバイス ツリーは必要ありません。しかし、ボード ファイルもデバイス ツリーも存在しない場合、カーネルは実行されているハードウェアの種類を知る方法がありません。
デバイス ツリー ブロブ (dtb) はブートローダーによって RAM にロードされ、ブートローダーは所定のレジスタを介してカーネルにその場所を通知します。
Linux はゆっくりとデバイス ツリーに移行しています。すべては PowerPC で始まり、現在は ARM がそれを持っています。システム情報を渡す方法としては、ARM の ATAGS などを使用するよりも優れています。
ザイリンクスの Zynq について言及したので、ブートローダー (u-boot) には、カーネルとデバイス ツリーを不揮発性メモリ領域 (この場合は SD カード) から読み取るというこのタスクが割り当てられます。カーネルとデバイス ツリーが boot コマンドに渡されます。
Zynq と U-Boot の詳細を読んで理解してください。「デバイス ツリー」サブ セクションを見つけます。