DTO を実装する

DTO の実装には、デバイスツリー(DT)の分割、ビルド、パーティショニング、実行が含まれます。実装を実行した後、2 つの DT 間の互換性を維持し、各 DT パーティションのセキュリティを確保するための戦略を決定する必要があります。

DT を分割する

まず、デバイスツリーを次の 2 つに分割します。

  • メイン DT: SoC のみの部分と、SoC ベンダーが提供するデフォルトの設定。
  • オーバーレイ DT: ODM / OEM が提供するデバイス固有の設定。

デバイスツリーを分割した後、メイン DT とオーバーレイ DT をマージしたときにデバイスの完全な DT になるように、メイン DT とオーバーレイ DT 間の互換性を確保する必要があります。DTO 形式とルールの詳細については、DTO 構文を参照してください。複数のデバイスツリーに関しては、複数の DT で詳細をご確認ください。

メイン DT とオーバーレイ DT をビルドする

メイン DT をビルドする手順は次のとおりです。

  1. メイン DT .dts.dtb ファイルにコンパイルします。
  2. ブートローダーがランタイム時にアクセスできるパーティションに .dtb ファイルをフラッシュします(下記の詳細を参照)。

オーバーレイ DT をビルドする手順は次のとおりです。

  1. オーバーレイ DT .dts.dtbo ファイルにコンパイルします。このファイル形式は、フラット化されたデバイスツリーとしてフォーマットされた .dtb ファイルと同じですが、ファイル拡張子が異なるため、メイン DT と区別できます。
  2. ブートローダーがランタイム時にアクセスできるパーティションに .dtbo ファイルをフラッシュします(下記の詳細を参照)。

DTC を使用したコンパイルと、ホストでの DTO の結果の検証については、コンパイルと検証で詳細をご確認ください。

DT をパーティショニングする

.dtb.dtbo を挿入する、ブートローダーがランタイム時にアクセスできるフラッシュ メモリ内の信頼できる場所を決定します。

メイン DT の場所の例:

  • カーネル(image.gz)に追加された、ブート パーティションの一部。
  • 専用パーティション(dtb)の個別の DT blob(.dtb)。

オーバーレイ DT の場所の例:

固有のパーティション
図 1. dtbo パーティションなどの固有のパーティションに .dtbo を挿入します。
ODM パーティション
図 2. .dtboodm パーティションに挿入します(ブートローダーが odm パーティションのファイル システムからデータを読み込むことができる場合にのみ行ってください)。

注: オーバーレイ DT のパーティションのサイズは、デバイスと、メイン DT の blob 上で必要な変更の量によって異なります。通常は 8 MB あれば十分です。また、将来に必要に応じてパーティションのサイズを大きくすることもできます。

シームレス(A/B)アップデートをサポートするデバイスの場合、メイン DT とオーバーレイ DT のパーティション A/B を次のように作成します。

例 1
図 3. DTBO パーティション A/B、例 1
例 2
図 4. DTBO パーティション A/B、例 2

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

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

図 5. ブートローダーでのデバイスツリー オーバーレイの一般的なランタイム実装
  1. .dtb をストレージからメモリに読み込みます。
  2. .dtbo をストレージからメモリに読み込みます。
  3. .dtb.dtbo でオーバーレイして、DT を統合します。
  4. 統合した DT のメモリアドレスを指定して、カーネルを起動します。

互換性の維持

(SoC ベンダーの)メイン DTB は、DTBO の API サーフェスとして扱われます。デバイスツリーを SoC 共通部分とデバイス固有部分に分割した後、この 2 つの互換性をそれ以降維持する必要があります。具体的には以下の互換性を維持する必要があります。

  • メイン DT の DT 定義(ノード、プロパティ、ラベルなど): メイン DT の定義が変更されると、オーバーレイ DT に変更が発生する場合があります。たとえば、メイン DT のノード名を修正するには、元のノード名にマッピングする「エイリアス」ラベルを定義します(これにより、オーバーレイ DT の変更を回避できます)。
  • オーバーレイ DT の保存場所(パーティション名、保存形式など)

セキュリティを確保する

ブートローダーは、DTB / DTBO が安全であること、変更されていないこと、壊れていないことを確認する必要があります。たとえば、VBoot 1.0 や AVB HASH フッター(VBoot 2.0)のブートイメージの署名など、DTB / DTBO を保護する任意のソリューションを使用できます。

  • DTB / DTBO が固有のパーティションにある場合、そのパーティションを AVB の信頼チェーンに追加できます。信頼チェーンはハードウェアで保護されたルート オブ トラストから開始してブートローダーに移動し、DTB / DTBO パーティションの整合性と真正性を検証します。
  • DTB / DTBO が既存のパーティション(odm パーティションなど)にある場合、そのパーティションは AVB の信頼チェーン内にある必要があります(DTBO パーティションは odm パーティションと公開鍵を共有できます)。

詳細については、確認済みの起動を参照してください。