實施 DTO

實現DTO涉及到設備樹的劃分、建置、分區和運作。在實現有效實施後,您還必須維護兩個 DT 之間的相容性,並確定確保每個 DT 分割區安全的策略。

劃分設備識別符

首先將設備樹分為兩 (2) 部分:

  • 主要設備識別碼。僅 SoC 部分和預設配置,由 SoC 供應商提供。
  • 疊加設備識別碼。由 ODM/OEM 提供的設備特定配置。

劃分設備樹後,必須確保主設備DT和Overlay設備設備的相容性,以便將主設備設備樹和Overlay設備設備樹合併後得到一個完整的設備設備樹。有關 DTO 格式和規則的詳細信息,請參閱DTO 語法。有關多設備樹的詳細信息,請參見多設備樹

建構主 DT 和覆蓋 DT

建構主 DT:

  1. 將主 DT .dts編譯為.dtb檔。
  2. .dtb檔案閃存到引導程式運行時可存取的分區(詳細資訊如下)。

要建置覆蓋 DT:

  1. 將覆蓋 DT .dts編譯為.dtbo檔。雖然此檔案格式與格式化為扁平裝置樹的.dtb檔案相同,但不同的檔案副檔名將其與主 DT 區分開來。
  2. .dtbo檔案閃存到引導程式運行時可存取的分區(如下詳述)。

有關使用 DTC 進行編譯以及在主機上驗證 DTO 結果的詳細信息,請參閱編譯和驗證

分區 DT

確定閃存中引導程式運行時可存取且可信任的位置來放置.dtb.dtbo

主設備標識符的位置範例:

  • 引導分割區的一部分,附加到核心( image.gz )。
  • 在專用分區 ( dtb ) 中分離 DT blob ( .dtb )。

覆蓋裝置識別碼的範例位置:

獨特的分區
圖 1..dtbo放入唯一的分區,例如dtbo分區。
ODM分區
圖 2..dtbo放入odm分割區(僅當您的開機載入程式能夠從odm分割區的檔案系統載入資料時才執行此操作)。

注意:覆蓋 DT 分割區的大小取決於裝置以及主 DT blob 之上所需的更改量。通常,8 MB 就足夠了,並且可以根據需要在未來提供成長空間。

對於支援無縫 (A/B) 更新的設備,A/B 主 DT 和覆蓋 DT 分區:

實施例1
圖 3.DTBO分區 A/B,範例 1。
實施例2
圖 4. DTBO 分區 A/B,範例 2。

在引導程式中執行

跑步:

圖 5.引導程式中設備樹覆蓋的典型執行時間實作。
  1. .dtb從儲存載入到記憶體中。
  2. .dtbo從儲存載入到記憶體中。
  3. .dtb.dtbo疊加以成為合併的 DT。
  4. 給定合併DT的記憶體位址啟動核心。

保持相容性

主 DTB(來自 SoC 供應商)被視為 DTBO 的 API 表面。將設備樹分為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分區共享公鑰)。

有關詳細信息,請參閱驗證啟動