自 2025 年 3 月 27 日起,我們建議您使用 android-latest-release
而非 aosp-main
建構及貢獻 AOSP。詳情請參閱「Android 開放原始碼計畫變更」。
實作 DTO
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
實作裝置樹重疊 (DTO) 的過程包括分割裝置樹 (DT)、建構、分割及執行。實作完成後,您也必須維持兩個 DT 之間的互通性,並決定如何確保每個 DT 分割區的安全性。
將 DT 除以
首先將 DT 分成兩個部分:
- 主要 DT。SoC 專屬部分和 SoC 供應商提供的預設設定。
- 重疊 DT。ODM/OEM 提供的裝置專屬設定。
分割 DT 後,您必須確保主 DT 和疊加式 DT 之間的相容性,以便合併主 DT 和疊加式 DT,產生裝置的完整 DT。如要進一步瞭解 DTO 格式和規則,請參閱「DTO 語法」。如要進一步瞭解多個 DT,請參閱「使用多個 DT」一文。
建構主要和重疊 DT
如要建構主要 DT:
- 將主要 DT
.dts
編譯至 .dtb
檔案。
- 將
.dtb
檔案刷入可供引導程式在執行階段存取的分區 (詳情請參閱「[Partition DTs](#partition)」)。
如要建構重疊式 DT:
- 將疊加式 DT
.dts
編譯為 .dtbo
檔案。雖然這個檔案格式與以平坦化 DT 格式設定的 .dtb
檔案相同,但不同的副檔名可將其與主要 DT 區分開來。
- 將
.dtbo
檔案刷入可供引導程式在執行階段存取的分區 (詳情請參閱「[Partition DTs](#partition)」)。
如要進一步瞭解如何使用 DTC 進行編譯,並在主機上驗證 DTO 結果,請參閱「編譯及驗證」一文。
分區日期時間
在快閃記憶體中找出可供系統啟動載入程式在執行階段存取且可信的位置,以便放置 .dtb
和 .dtbo
。
主要 DT 的範例位置:
- 啟動分區的一部分,附加至核心 (
image.gz
)
- 在專屬分區 (
dtb
) 中分隔 DT 資料 blob (.dtb
)
重疊式 DT 的示例位置:

圖 1. 將 .dtbo 放入 odm 分割區 (只有在您的引導程式具有從 odm 分割區的檔案系統載入資料的功能時,才執行此操作)。

圖 2. 將 .dtbo 放入專屬分區,例如 dtbo 分區。
注意:疊加式 DT 分割區的大小取決於裝置,以及在主要 DT blob 上需要進行的變更量。一般來說,8 MB 就足夠了,而且日後如有需要,還能有空間擴充。
如果裝置支援無縫 (A/B) 更新,請 A/B 主 DT 和覆蓋 DT 分區:

圖 3. DTBO 分區 A/B 測試,示例 1。

圖 4. DTBO 區隔 A/B 版本,示例 2。
在系統啟動載入程式中執行
執行方式如下:

圖 5. 系統啟動載入程式中 DTO 的一般執行階段實作。
- 將
.dtb
從儲存空間載入記憶體。
- 將
.dtbo
從儲存空間載入記憶體。
- 將
.dtb
與 .dtbo
重疊,以便合併 DT。
- 根據合併的 DT 記憶體位址啟動核心。
維持相容性
主要 DTB (來自 SoC 供應商) 會視為 DTBO 的 API 介面。將 DT 分割為 SoC 通用部分和裝置專屬部分後,您必須在日後讓這兩個部分保持相容,包括:
- 主要資料轉移中資料轉移定義。例如節點、屬性和標籤。主 DT 中的任何定義變更都可能導致疊加層 DT 發生變更。舉例來說,如要修正主資料轉換中的節點名稱,請定義對應至原始節點名稱的「別名」標籤 (以免重疊資料轉換發生變更)。
- 重疊 DT 商店位置。例如分區名稱、儲存格式。
確保安全
系統啟動載入程式必須確保 DTB 或 DTBO 安全、未經修改且未損毀。您可以使用任何解決方案來保護 DTB 或 DTBO,例如 VBoot 1.0 中的啟動映像檔簽章或 AVB HASH 底部 (VBoot 2.0)。
- 如果 DTB 或 DTBO 位於獨立分區,您可以將該分區加入 AVB 的信任鏈。信任鏈結從硬體保護的信任根開始,並前往系統啟動載入程式,驗證 DTB 或 DTBO 分區的完整性和真實性。
- 如果 DTB 或 DTBO 位於現有分區 (例如
odm
分區),則該分區應位於 AVB 的信任鏈中。(DTBO 區隔可與 odm
區隔共用公開金鑰)。
詳情請參閱「驗證開機程序」。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2025-07-26 (世界標準時間)。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-07-26 (世界標準時間)。"],[],[],null,["# Implement DTOs\n\nImplementing device tree overlays (DTOs) involves dividing the device tree (DT), building,\npartitioning, and running. After you have a working implementation, you must also maintain\ncompatibility between the two DTs and determine a strategy for ensuring the\nsecurity of each DT partition.\n\nDivide the DT\n-------------\n\nStart by dividing the DT into two parts:\n\n- **Main DT**. The SoC-only part and the default configurations, provided by SoC vendor.\n- **Overlay DT**. The device-specific configurations, provided by ODM/OEM.\n\nAfter dividing the DTs, you must ensure compatibility between main\nDT and overlay DT so that merging main DT and overlay DT results in a complete\nDT for the device. For details on DTO format and rules, see\n[DTO syntax](/docs/core/architecture/dto/syntax). For details on\nmultiple DTs, see\n[Use multiple DTs](/docs/core/architecture/dto/multiple).\n\nBuild main and overlay DTs\n--------------------------\n\nTo build the main DT:\n\n1. Compile the main DT `.dts` into a `.dtb` file.\n2. Flash the `.dtb` file into a bootloader runtime-accessible partition (detailed in \\[Partition DTs\\](#partition)).\n\nTo build the overlay DT:\n\n1. Compile the overlay DT `.dts` into a `.dtbo` file. While this file format is the same as the `.dtb` file formatted as a flattened DT, the different file extension distinguishes it from the main DT.\n2. Flash the `.dtbo` file into a bootloader runtime-accessible partition (detailed in \\[Partition DTs\\](#partition)).\n\nFor details on compiling with DTC and verifying DTO results on the host, see\n[Compile and verify](/docs/core/architecture/dto/compile).\n\nPartition DTs\n-------------\n\nDetermine a bootloader runtime-accessible and trusted location in flash\nmemory to put `.dtb` and `.dtbo`.\n\nExample locations for the main DT:\n\n- Part of boot partition, appended to the kernel (`image.gz`)\n- Separate DT blobs (`.dtb`) in dedicated partition (`dtb`)\n\nExample locations for the overlay DT: \n\n**Figure 1.** Put .dtbo into an odm partition (do this only if your bootloader has\nthe capability to load data from the filesystem of an odm partition). \n\n**Figure 2.** Put .dtbo into a unique partition, such as a dtbo partition.\n\n**Note:** The size of the\noverlay DT partition depends on the device and the amount of changes needed on\ntop of the main DT blob. Typically, 8 MB is more than enough and allows room to\ngrow in the future if required.\n\nFor devices that support\n[seamless (A/B) updates](/docs/core/ota/ab_updates), A/B the\nmain DT and overlay DT partitions: \n\n**Figure 3.** DTBO partition A/B, example 1. \n\n**Figure 4.** DTBO partition A/B, example 2.\n\nRun in bootloader\n-----------------\n\nTo run:\n\n**Figure 5.** Typical runtime implementation for DTO in bootloader.\n\n1. Load `.dtb` from storage into memory.\n2. Load `.dtbo` from storage into memory.\n3. Overlay `.dtb` with `.dtbo` to be a merged DT.\n4. Start kernel given the memory address of the merged DT.\n\nMaintain compatibility\n----------------------\n\nThe main DTB (from SoC vendor) is treated as an API surface for DTBOs. After\nseparating the DT into a SoC-common part and a device-specific part,\nyou must keep the two parts mutually compatible in the future, including:\n\n- **DT definition in main DT.** For example, nodes, properties, labels. Any definition change in main DT could trigger changes in overlay DT. For example, to correct a node name in main DT, define an \"alias\" label that maps to the original node name (to avoid the change of overlay DT).\n- **Overlay DT store location.** For example, partition name, store format.\n\nEnsure security\n---------------\n\nBootloader must ensure the DTB or DTBO is secure, unmodified, and uncorrupted.\nYou could use any solution to secure DTB or DTBO, for example,\n[Boot image\nsignature](/docs/security/features/verifiedboot/verified-boot#signature_format) in VBoot 1.0 or\n[AVB\nHASH footer](https://android.googlesource.com/platform/external/avb/+/android16-release/README.md#The-VBMeta-struct) (VBoot 2.0).\n\n- If DTB or DTBO is in a unique partition, you can add that partition to the trust chain of AVB. The trust chain starts from a hardware-protected root of trust and goes to the bootloader, which verifies the integrity and authenticity of DTB or DTBO partition.\n- If DTB or DTBO is in an existing partition (such as the `odm` partition), that partition should be in the trust chain of AVB. (DTBO partition could share a public key with `odm` partition).\n\nFor details, refer to [Verified\nBoot](/docs/security/features/verifiedboot)."]]