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

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

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

DTBO: オーバーレイ用デバイスツリー blob

Android 9 リリースのアップデート

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

デバイスツリーを読み込む

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

図 1. ブートローダーでデバイスツリーを読み込むための一般的な実装。
  1. デバイスツリー blob を作成して書き込むには:

    1a. デバイスツリー コンパイラ(dtc>)を使用して、デバイスツリー ソース(.dts)をデバイスツリー blob(.dtb)にコンパイルします。デバイスツリー blob は、フラット化されたデバイスツリーとしてフォーマットされます。1b. ブートローダーが実行時にアクセスできる場所に .dtb ファイルを書き込みます(詳細は後述します)。

  2. パーティショニングを行うには、ブートローダーが実行時にアクセスできるフラッシュ メモリ内の信頼できる場所を決定して、.dtb を配置します。場所の例:

    ブート パーティション
    図 2. image.gz に追加し、「kernel」として mkbootimg に渡すことで、ブート パーティションに .dtb を挿入する。
    固有のパーティション
    図 3. 固有のパーティション(dtb パーティションなど)に .dtb を挿入する。
  3. デバイスツリー blob を読み込み、カーネルを起動するには:

    • ストレージからメモリに .dtb を読み込みます。
    • 読み込まれた DT のメモリアドレスを使用して、カーネルを起動します。

次のステップ

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