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. odm パーティションに .dtbo を挿入する(これは、ブートローダーが 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 のメモリアドレスを指定して、カーネルを起動します。

互換性の維持

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

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

セキュリティの確保

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

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

詳細については、確認付きブートを参照してください。