複数の DT を使用する

多くの SoC ベンダーや ODM は、デバイスでの複数の DT の使用をサポートしています。そのため、1 つのイメージで複数の SKU / 構成に対応できます。このようなケースでは、ブートローダーはハードウェアを識別し、ランタイム時に対応する DT を読み込みます。

図 1 ブートローダー内の複数のデバイスツリー オーバーレイ

注: 複数の DT を使用することは必須ではありません。

設定する

DTO モデルに複数の DT のサポートを追加するには、メイン DT のリストとオーバーレイ DT のリストを設定します。

図 2. 複数の DT のランタイム DTO 実装。

ブートローダーでは以下のことができる必要があります。

  • SoC ID を読み、対応するメイン デバイスツリーを選択する。
  • ボード ID を読み、それに応じてオーバーレイ デバイスツリーのセットを選択する。

ランタイム時に使用するメイン 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 パーティション形式で詳細が説明されているテーブル構造とヘッダー形式を使用します。

ブートローダーで実行する

以下の手順で実行します。

  1. SoC を特定し、ストレージから対応する .dtb をメモリに読み込みます。
  2. ボードを特定し、ストレージから対応する .dtbo をメモリに読み込みます。
  3. .dtb.dtbo でオーバーレイして、DT を統合します。
  4. 統合した DT のメモリアドレスを指定して、カーネルを起動します。