デバイス ツリー オーバーレイ

デバイス ツリー (DT)は、検出不可能なハードウェアを説明する名前付きノードとプロパティのデータ構造です。 Android で使用される Linux カーネルなどのカーネルは、DT を使用して、Android 搭載デバイスで使用される幅広いハードウェア構成をサポートします。ハードウェア ベンダーは、 Device Tree Compilerを使用してDevice Tree Blob (DTB)ファイルにコンパイルされる独自のDevice Tree Source (DTS)ファイルを提供します。これらのファイルは、ブートローダーによって使用されます。 DTB ファイルには、バイナリ形式のフラット化されたデバイス ツリーが含まれています。

デバイス ツリー オーバーレイ (DTO)を使用すると、中央のデバイス ツリー ブロブ (DTB) をデバイス ツリーに重ねることができます。 DTO を使用するブートローダーは、システム オン チップ (SoC) DT を維持し、デバイス固有の DT を動的にオーバーレイして、ノードをツリーに追加し、既存のツリーのプロパティを変更できます。

DTBOオーバーレイ用のデバイス ツリー ブロブ

Android 9 リリースの更新

Android 9 では、ブートローダーは、統合デバイス ツリー ブロブをカーネルに渡す前に、デバイス ツリー オーバーレイで定義されたプロパティを変更してはなりません。

デバイス ツリーの読み込み

ブートローダーにデバイス ツリーをロードするには、ビルド、パーティショニング、および実行が必要です。

図 1.ブートローダーでデバイス ツリーをロードするための一般的な実装。
  1. デバイス ツリー ブロブを作成してフラッシュするには:

    1a.デバイス ツリー コンパイラ ( dtc >) を使用して、デバイス ツリー ソース ( .dts ) をデバイス ツリー BLOB ( .dtb ) にコンパイルします。デバイス ツリー ブロブは、フラット化されたデバイス ツリーとしてフォーマットされます。 1b. .dtbファイルをブートローダー ランタイムがアクセス可能な場所にフラッシュします (詳細は後述)。

  2. パーティション化するには、フラッシュ メモリ内のブートローダー ランタイム アクセス可能で信頼できる場所を決定し、 .dtbを配置します。場所の例:

    ブート パーティション
    図 2. .dtbに追加し、「 kernel 」としてimage.gzに渡すことで、ブート パーティションにmkbootimgを配置します。
    ユニークなパーティション
    図 3. .dtbを一意のパーティション ( dtbパーティションなど) に配置します。

  3. デバイス ツリー ブロブをロードしてカーネルを起動するには、次のようにします。

    3a. .dtbをストレージからメモリにロードします。 3b.ロードされた DT のメモリ アドレスを使用してカーネルを起動します。

次は何ですか?

このページでは、DT をロードするための一般的なブートローダー ワークフローについて詳しく説明し、一般的な DT 用語のリストを提供します。このセクションの他のページでは、ブートローダー サポートを実装する方法、DTOコンパイル、検証、および最適化する方法、および複数の DT を使用する方法について説明します。また、 DTO 構文と必要なDTO/DTBO パーティション フォーマットの詳細を取得することもできます。