自 2025 年 3 月 27 日起,我們建議您使用 android-latest-release
而非 aosp-main
建構及貢獻 AOSP。詳情請參閱「Android 開放原始碼計畫變更」。
使用多個 DT
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
許多 SoC 供應商和 ODM 都支援在裝置上使用多個裝置樹狀結構 (DT),讓單一映像檔可支援多個 SKU 或設定。在這種情況下,Bootloader 會識別硬體,並在執行階段載入對應的 DT:

圖 1. 系統啟動載入程式中的多個裝置樹狀結構疊加層 (DTO)。
注意:您不一定要使用多個 DT。
設定
如要在 DTO 模型中新增對多個 DT 的支援,請設定主要 DT 清單和另一個重疊 DT 清單。

圖 2. 適用於多個 DT 的執行階段 DTO 實作。
開機載入程式應具備以下功能:
- 讀取 SoC ID,並選取對應的主 DT。
- 讀取板 ID,並據此選取一組疊加式 DT。
請只選取一個主要 DT,以便在執行階段使用。您可以選取多個疊加式資料表,但這些資料表必須與所選主要資料表相容。使用多個疊加層可避免在 DTBO 分割區中為每個電路板儲存一個疊加層,並讓系統啟動載入程式根據電路板 ID (或可能透過探測周邊裝置) 判斷所需疊加層的子集。舉例來說,板 A 可能需要由覆疊 1、3 和 5 新增的裝置,而板 B 可能需要由覆疊 1、4 和 5 新增的裝置。
分區
如要分割,請在快閃記憶體中找出可供引導程式在執行階段存取且可信的位置,用來儲存 DTB 和 DTBO (引導程式必須能夠在比對程序中找到這些檔案)。請注意,DTB 和 DTBO 無法位於相同分區。如果 DTB/DTBO 位於 dtb
/dtbo
分割區,請使用「DTB 和 DTBO 分割區格式」中詳述的資料表結構和標頭格式。
在系統啟動載入程式中執行
執行方式如下:
- 找出 SoC,並從儲存空間載入對應的 .dtb 至記憶體。
- 識別主機板,並從儲存空間載入對應的
.dtbo
至記憶體。
- 將
.dtb
與 .dtbo
重疊,以便合併 DT。
- 根據合併的 DT 記憶體位址啟動核心。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。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,["# Use multiple DTs\n\nMany SoC vendors and ODMs support the use of multiple device trees (DTs) on a device,\nenabling one image to power multiple SKUs or configurations. In such cases, the\nbootloader identifies the hardware and loads the corresponding DT at runtime:\n\n**Figure 1.** Multiple device tree overlays (DTOs) in bootloader.\n\n**Note:** Using multiple DTs isn't mandatory.\n\nSet up\n------\n\nTo add support for multiple DTs to the DTO model, set up a list of main DTs\nand another list of overlay DTs.\n\n**Figure 2.** Runtime DTO implementation for multiple DTs.\n\nThe bootloader should be able to:\n\n- Read the SoC ID and select the corresponding main DT.\n- Read the board ID and select the set of overlay DTs accordingly.\n\nOnly one main DT should be selected for use at runtime. Multiple overlay DTs\nmay be selected but they must be compatible with the chosen main DT. Using\nmultiple overlays can help avoid storing one overlay per board within the DTBO\npartition and enable the bootloader to determine the subset of required overlays\nbased on the board ID (or possibly by probing the peripherals). For\nexample, Board A may need the devices added by the overlays 1, 3, and 5 while\nBoard B may need the devices added by the overlays 1, 4, and 5.\n\nPartition\n---------\n\nTo partition, determine a bootloader runtime-accessible and trusted location\nin flash memory to store the DTBs and DTBOs (bootloader must be able to locate\nthese files in the matching process). Keep in mind that DTBs and DTBOs cann't\nexist in the same partition. If your DTBs/DTBOs are in the\n`dtb`/`dtbo` partition, use the table structure and header\nformat detailed in [DTB and DTBO\npartition format](/docs/core/architecture/dto/partitions).\n\nRun in bootloader\n-----------------\n\nTo run:\n\n1. **Identify the SoC** and load the corresponding .dtb from storage into memory.\n2. **Identify the board** and load the corresponding `.dtbo` from storage into memory.\n3. Overlay the `.dtb` with the `.dtbo` to be a merged DT.\n4. Start kernel given the memory address of the merged DT."]]