Device Tree Overlays

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

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

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

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

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

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

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

図 1 ブートローダーでデバイスツリーを読み込むための一般的な実装。
  1. ビルドするには:
    • デバイスツリー コンパイラー(dtc)を使用して、フラット化されたデバイスツリーとしてフォーマットされたデバイスツリー blob(.dtb)にデバイスツリー ソース(.dts)をコンパイルします。
    • ブートローダーがランタイム時にアクセスできる場所に .dtb ファイルをフラッシュします。
  2. パーティショニングするには、.dtb を挿入する、ブートローダーがランタイム時にアクセスできるフラッシュ メモリ内の信頼できる場所を決定します。場所の例:
    ブート パーティション
    図 2 image.gz に追加し、「kernel」として mkbootimg に渡すことで、ブート パーティションに .dtb を挿入する。
    固有のパーティション
    図 3. 固有のパーティションに .dtb(例: dtb パーティション)を挿入する。
  3. 以下の手順で実行します。
    • .dtb をストレージからメモリに読み込みます。
    • 読み込まれた DT のメモリアドレスを指定して、カーネルを起動します。

用語

このセクションでは、以下のデバイスツリーの用語を使用します。

DT デバイスツリー
DTB デバイスツリー Blob
DTBO オーバーレイ用デバイスツリー Blob
DTC デバイスツリー コンパイラー
DTO デバイスツリー オーバーレイ
DTS デバイスツリー ソース
FDT フラット化されたデバイスツリー(.dtb blob ファイルに含まれるバイナリ形式)