實作 DTO

實作裝置樹狀結構疊加層 (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:

  1. 將主要 DT .dts 編譯為 .dtb 檔案。
  2. .dtb 檔案刷新至系統啟動載入程式執行階段可存取的分區 (詳情請參閱 [分區 DT](#partition))。

如何建立疊加層 DT:

  1. 將疊加層 DT .dts 編譯成 .dtbo 檔案。雖然 這個檔案格式與.dtb 扁平化 DT,副檔名與 主要 DT 值。
  2. .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 的一般執行階段實作。

  1. .dtb 從儲存空間載入記憶體。
  2. .dtbo 從儲存空間載入記憶體。
  3. .dtb.dtbo 重疊,成為合併的 DT。
  4. 根據合併 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 分區共用公開金鑰)。

詳情請參閱「已驗證 啟動