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 (包含id
、rev
和custom
欄位),可保存硬體識別資訊 項目。詳情請參閱「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 中選取的裝置樹狀結構的零基索引。