DTO の実装

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

DT を分割する

まず、DT を次の 2 つの部分に分割します。

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

DT を分割した後、メイン DT とオーバーレイ DT を実行し、メイン DT とオーバーレイ DT を統合することで、 デバイスの DT。DTO の形式とルールの詳細については、以下をご覧ください。 DTO の構文。詳細については、 参照できます。詳しくは、 複数の DT

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

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

  1. メイン DT の .dts.dtb ファイルにコンパイルします。
  2. ブートローダーがランタイム時にアクセスできるパーティションに .dtb ファイルをフラッシュします ([パーティション DT](#partition) で詳しく説明)。

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

  1. オーバーレイ DT の .dts.dtbo ファイルにコンパイルします。しばらく このファイル形式は、.dtb フラット化された DT は、ファイル拡張子が異なるため、 できます。
  2. ブートローダーがランタイム時にアクセスできるパーティションに .dtbo ファイルをフラッシュします ([パーティション DT](#partition) で詳しく説明)。

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

パーティション DT

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

メイン DT の場所の例:

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

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

図 1. dtbo パーティションなどの固有のパーティションに .dtbo を挿入する

図 2. odm パーティションに .dtbo を挿入する(ブートローダーが odm パーティションのファイル システムからデータを読み込む機能など)。

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

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

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

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

ブートローダーで実行

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

図 5. ブートローダーでの DTO の一般的なランタイム実装。

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

互換性の維持

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

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

セキュリティを確保する

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

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

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