實作裝置樹狀結構疊加層 (DTO) 包括分割裝置樹狀結構 (DT)、建構、 以及 Kubernetes完成實作後,您還必須 確保兩個 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
檔案刷新至系統啟動載入程式執行階段可存取的分區 (詳情請參閱 [分區 DT](#partition))。
如何建立疊加層 DT:
- 將疊加層 DT
.dts
編譯成.dtbo
檔案。雖然 這個檔案格式與.dtb
扁平化 DT,副檔名與 主要 DT 值。 - 將
.dtbo
檔案刷新至系統啟動載入程式執行階段可存取的分區 (詳情請參閱 [分區 DT](#partition))。
如要進一步瞭解如何在 DTC 編譯程式碼及驗證主機上的 DTO 結果,請參閱 編譯並驗證。
分區 DT
判斷系統啟動載入程式執行階段可以存取且信任的 Flash 位置
放入 .dtb
和 .dtbo
的記憶體。
主要 DT 的位置範例:
- 已附加至核心的啟動分區部分 (
image.gz
) - 將專屬分區 (
dtb
) 中的 DT blob (.dtb
) 分開
疊加層 DT 的位置範例:
圖 1. 將 .dtbo 放入不重複的分區,例如 dtbo 分區。
圖 2. 將 .dtbo 放入 odm 分區 (只有在系統啟動載入程式具有 可從 odm 分區的檔案系統載入資料)。
注意: 重疊 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 中的節點名稱,請定義「別名」加上標籤 對應至原始節點名稱 (避免變更 DT)。
- 重疊 DT 商店位置。例如分區名稱、商店 格式。
確保安全
系統啟動載入程式必須確保 DTB 或 DTBO 安全無虞、未修改且未損毀。 您可以使用任何解決方案來保護 DTB 或 DTBO 的安全,例如: 開機映像檔 VBoot 1.0 中的簽章 AVB 高可用性頁尾 (VBoot 2.0)。
- 如果 DTB 或 DTBO 屬於不重複的分區,可將該分區新增至 AVB 的信任鏈信任鏈結是從硬體保護的根層級 並前往系統啟動載入程式,驗證完整性和真實性 DTB 或 DTBO 分區的效能。
- 如果 DTB 或 DTBO 位於現有的分區 (例如
odm
分區) 中,該分區應位於 AVB 的信任鏈中。(DTBO 分區 可與odm
分區共用公開金鑰)。
詳情請參閱「已驗證 啟動。