デバイスツリー オーバーレイ(DTO)は、既存のフラット化されたデバイスツリー(FDT)実装を拡張します。これは、元のデータを修正する追加のオーバーレイ FDT を読み込んで、実行時にカーネルの初期 devicetree データをユーザー空間から変更できるようにすることによって行われます。Android では、実行時にユーザー空間から DT blob を更新する必要はありませんが、ベンダーには、libfdt
または libufdt
を利用して devicetree のパッチをブートローダーに追加することをおすすめします。
Android DTO のサポート
DTO に対する Android のサポートは、Android のリリースによって異なります。
- Android 7.x 以前では、devicetree のサポートは必要なく、DT blob をカーネルに渡す方法や格納場所についての推奨事項もありません。
- Android 8.x では、カーネルのボード固有の部分と SoC のみの部分を分離するために、devicetree のサポートを推奨しています。
- Android 9 以降では、デバイスツリー blob オーバーレイ(DTBO)パーティションが存在し、少なくとも 1 つの DTO が適用されていることが必要です。
DTO のパーティショニング要件
ほとんどの Android デバイスでは、ビルド時に DT blob がカーネルに追加され、ブートローダーがカーネルから blob を読み込みます。ただし、DT blob はシステム オン チップ(SoC)カーネルの一部と見なされるため、Android では DT blob をビルドまたは保存する方法について特別な要件はありません。デバイスは、DT blob をカーネルに追加したり、blob を別のパーティションに格納したりできます。そのための要件は、ブートローダーが DT blob を読み込む方法と場所を認識することだけです。
DTO をサポートするには、デバイスに以下が必要です。
- ボード固有の DT オーバーレイのカーネル イメージごとに 1 つの DTBO パーティション。ブートローダーは、SoC 固有の DTB を読み込む場所と方法を認識する必要があります。パーティション サイズは、SoC カーネルを作成するために必要な変更の数によって決まります。将来の更新に対応できるサイズを選択してください。通常は 8 MB のパーティション サイズで十分です。
- A/B デバイス用に更新された DTO パーティション。リカバリ カーネルは Android カーネルと同じですが、パーティションを A/B デバイス用にセットアップして、無線(OTA)アップデートで更新できるようしてください。パーティション サイズは、デバイスと、メインの SoC カーネルの DT blob への変更の数によって決まります。
DTO のブートローダー要件
DTO をサポートするには、ブートローダーが以下の要件を満たす必要があります。
- SoC 固有の DT blob を読み込む場所とベンダー固有のやり方で読み込む方法を認識する。場所については、A/B デバイスのブートスロットを考慮します。方法については、blob はカーネルの末尾に追加されるので、一般的にはカーネル イメージの末尾から抽出します。
- オーバーレイ DT blob を読み込む場所とベンダー固有のやり方で読み込む方法を認識する。
- 結合されたデバイスツリーをカーネルに渡す前に、メインの DT blob にオーバーレイをパッチする。
DTO のサポートをブートローダーに追加する方法の詳細については、デバイスツリー オーバーレイをご覧ください。