デバイスツリー(DT)は、名前付きノードと、検出不能ハードウェアを記述するプロパティで構成されるデータ構造です。Android で使用される Linux カーネルなどのカーネルは、Android 搭載デバイスで使用される幅広いハードウェア構成を DT によってサポートします。ハードウェア ベンダーは独自のデバイスツリー ソース(DTS)ファイルを提供します。このファイルは、デバイスツリー コンパイラによってデバイスツリー blob(DTB)ファイルにコンパイルされます。これらのファイルは、ブートローダーによって使用されます。DTB ファイルには、バイナリ形式のフラット化されたデバイスツリーが含まれています。
デバイスツリー オーバーレイ(DTO)は、中央の DTB を DT(デバイスツリー blob オーバーレイ(DTBO))にオーバーレイできるようにします。ブートローダーで DTO を使用することで、システム オン チップ(SoC)の DT を維持しながら、デバイス固有の DT を動的にオーバーレイできます(ツリーへのノードの追加や既存のツリーのプロパティの変更など)。
Android 9 リリースのアップデート
Android 9 では、ブートローダーは、統合した DTB をカーネルに渡す前に、DTO で定義されたプロパティを変更してはなりません。
DT を読み込む
ブートローダーで DT を読み込むには、ビルド、パーティショニング、実行が必要です。
図 1. ブートローダーでデバイスツリーを読み込むための一般的な実装
DTB を作成して書き込むには:
1a. DTC(
dtc
)を使用して、DTS(.dts
)を DTB(.dtb
)にコンパイルします。DTB はフラット化された DT としてフォーマットされます。1b. ブートローダーが実行時にアクセスできる場所に.dtb
ファイルを書き込みます(詳細は後述します)。パーティショニングを行うには、ブートローダーが実行時にアクセスできるフラッシュ メモリ内の信頼できる場所を決定して、
.dtb
を配置します。場所の例:図 2. .dtb を image.gz の末尾に追加し、
kernel として mkbootimg に渡して、
ブート パーティションに配置する図 3. .dtb を固有のパーティションに配置する
(例: dtb パーティション)DTB を読み込んでカーネルを起動するには:
- ストレージからメモリに
.dtb
を読み込みます。 - 読み込まれた DT のメモリアドレスを使用して、カーネルを起動します。
- ストレージからメモリに
次のステップ
このページでは、DT を読み込むためのブートローダーの一般的なワークフローを説明し、一般的な DT 用語のリストを掲載しています。このセクションの他のページでは、ブートローダーのサポートを実装する方法、DTO をコンパイル、検証、最適化する方法、複数の DT を使用する方法について説明します。また、DTO 構文と、必要となる DTO および DTBO パーティションのフォーマットについても詳細に説明します。