DTB 圖片

Android 實作項目可包含裝置樹狀結構 blob (DTB) 映像檔,以便用於 開機載入器。DTB 映像檔的位置 (以及指定 DTB 圖像參數的選項) 會因 Android 版本而異。

  • 在 Android 11 中,使用通用核心映像檔 (GKI) 的裝置必須支援供應商啟動分區,其中包含從啟動分區重新配置的所有供應商專屬資訊。由於 DTB 映像檔包含廠商專屬資料,因此現在是廠商開機分區的一部分。如要指定 DTB 映像檔參數,請參閱「供應商開機標頭」。

  • 在 Android 10 中,裝置可以在開機分割區中加入 DTB 映像檔。如要指定 DTB 圖片參數,請參閱加入 DTB 圖片參數 安裝在開機映像檔中

  • 在 Android 9 以下版本中,DTB 映像檔可以位於其專屬分區,也可以附加至核心 image.gz 以建立核心 + DTB 映像檔 (然後傳遞至 mkbootimg 以建立 boot.img)。

DTB 圖片格式

在 Android 10 以上版本中,DTB 映像檔必須使用一張 以下格式:

  • 連接在一起的 DT 元件。系統啟動載入程式會使用 每個 FDT 標頭中的 totalsize 欄位來讀取及剖析對應的 blob。

  • DTB/DTBO 分區。系統啟動載入程式讓您有效率地選取 檢查 dt_table_entry 結構體,以正確方式 DT blob (包含 idrevcustom 欄位),可保存硬體識別資訊 項目。詳情請參閱「DTB/DTBO 分割區」。

在開機映像檔中加入 DTB 映像檔

搭載 Android 10 的裝置可加入 執行映像檔如此一來,Android 就不需要支援附加的指令碼 將 DTB 映像檔新增至核心中的 image.gz,並啟用供應商測試 套件 (VTS) 測試來驗證 DTB (並標準化) 刊登位置。

此外,針對非 A/B 裝置,將 DTB 加入 復原映像檔,而非獨立的分區,才能避免 網路中斷。如在 OTA 期間發生 DTB 分區後發生問題, 而是在完成完整更新之前,裝置會嘗試啟動 完成 OTA 驗證模式;但由於 DTB 分區 更新檔案後,如果復原映像檔 ( 表示物件尚未更新)。將 DTB 映像檔做為開機映像檔格式的一部分 自行充分準備復原映像檔,藉此避免這類問題 無須依附於另一個分區)

開機映像檔結構

搭載 Android 10 的裝置可使用下列啟動映像檔結構,納入 DTB 映像檔。

開機映像檔區段 頁數
開機標頭 (1 頁) 1
核心 (l 頁) l = (kernel_size + page_size - 1) / page_size
Ramdisk (m 頁) m = (ramdisk_size + page_size - 1) / page_size
第二階段系統啟動載入程式 (n 頁) n = (second_size + page_size - 1) / page_size
復原 DTBO (o 頁面) o = (recovery_dtbo_size + page_size - 1) / page_size
DTB (p 頁) p = (dtb_size + page_size - 1) / page_size

DTB 圖片路徑

如果是搭載 Android 10 的裝置,您可以使用 mkbootimg.py 工具和下列引數,用於指定 DTB 的路徑 圖片。

引數 說明
dtb 開機/復原映像檔中要納入的 DTB 映像檔路徑。
dtb_offset 將值加入 base 引數後,請提供實體負載 最終裝置樹狀結構的位址舉例來說,如果 base 引數是 0x10000000,而 dtb_offset 引數 為 0x01000000,開機映像檔中的 dtb_addr_field 標頭會填入 0x11000000

您必須使用板卡設定變數 BOARD_PREBUILT_DTBIMAGE_DIR 指定 DTB 映像檔的路徑。如果有多個副檔名為 *.dtb 的檔案, Android 建構系統 BOARD_PREBUILT_DTBIMAGE_DIR 目錄 串連這些檔案,以建立用於開機映像檔的最終 DTB 映像檔 建立。

如要使用從 DTB 映像檔來傳遞 dtb 引數至 mkbootimg.py BOARD_PREBUILT_DTBIMAGE_DIR 指定的目錄,主機設定變數 BOARD_INCLUDE_DTB_IN_BOOTIMG 必須設為 true。例如:

BOARD_INCLUDE_DTB_IN_BOOTIMG := true

您可以將 dtb_offset 引數附加至 BOARD_MKBOOTIMG_ARGS 主面板 config 變數,例如:

BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --dtb_offset $(BOARD_DTB_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)

系統啟動載入程式支援

如要讓 VTS 在執行 Android 10 的裝置上順利執行,引導程式必須支援更新的開機映像檔,並新增 androidboot.dtb_idx 核心指令列參數,指出所選裝置樹狀結構 (DT) 的索引。您只能指定一個 (1) 索引。舉例來說,參數 androidboot.dtb_idx=N 會將 N 回報為 bootloader 從啟動映像檔中的一組 DTB 中選取的裝置樹狀結構的零基索引。