多くの SoC ベンダーと ODM は、デバイスでの複数のデバイスツリー(DT)の使用をサポートしています。そのため、1 つのイメージで複数の SKU または構成に対応できます。このようなケースでは、ブートローダーはハードウェアを識別し、実行時に対応する DT を読み込みます。
図 1. ブートローダー内の複数のデバイスツリー オーバーレイ。
注: 複数の DT を使用することは必須ではありません。
セットアップ
DTO モデルに複数の DT のサポートを追加するには、メイン DT のリストとオーバーレイ DT のリストをセットアップします。
図 2. 複数の DT のランタイム DTO 実装。
ブートローダーでは以下のことができる必要があります。
- SoC ID を読み、対応するメイン DT を選択する。
- ボード ID を読み、それに応じてオーバーレイ DT のセットを選択する。
実行時に使用するメイン DT は 1 つだけ選択する必要があります。オーバーレイ DT は複数選択できますが、選択したメイン DT と互換性がある必要があります。複数のオーバーレイを使用することで、DTBO パーティション内にボードごとに 1 つずつオーバーレイを格納するのではなく、ボード ID に基づいて(または、周辺機器をプローブすることにより)必要なオーバーレイのサブセットをブートローダーが決定できるようになります。たとえば、ボード A にはオーバーレイ 1、3、5 によって追加されたデバイスが必要で、ボード B にはオーバーレイ 1、4、5 によって追加されたデバイスが必要な場合があります。
パーティション
パーティショニングするには、DTB と DTBO を格納する、ブートローダーが実行時にアクセスできるフラッシュ メモリ内の信頼できる場所を決定します(ブートローダーは、照合プロセス中にこれらのファイルを検出できる必要があります)。DTB と DTBO は、同じパーティションに存在できません。DTB / DTBO が dtb
/ dtbo
パーティションにある場合は、DTB および DTBO パーティション形式で詳細が説明されているテーブル構造とヘッダー形式を使用します。
ブートローダーで実行する
以下の手順で実行します。
- SoC を特定し、ストレージから対応する .dtb をメモリに読み込みます。
- ボードを特定し、ストレージから対応する
.dtbo
をメモリに読み込みます。 .dtb
を.dtbo
でオーバーレイして、DT を統合します。- 統合した DT のメモリアドレスを指定して、カーネルを起動します。