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 blob 依序串連。系統啟動載入程式會使用每個 FDT 標頭中的
totalsize
欄位來讀取及剖析對應的 blob。DTB/DTBO 分區。系統啟動載入程式會檢查可保留項目硬體識別資訊的
dt_table_entry
結構 (包含id
、rev
和custom
欄位),有效選取正確的 DT blob。詳情請參閱 DTB/DTBO 分區。
在開機映像檔中加入 DTB 映像檔
搭載 Android 10 的裝置可在啟動映像檔中加入 DTB 映像檔。如此一來,Android 就不需要支援將 DTB 映像檔附加至核心中的 image.gz
的指令碼,也能使用供應商測試套件 (VTS) 測試來驗證 DTB 位置並標準化。
此外,如果是非 A/B 裝置,建議您將 DTB 當做復原映像檔的一部分,而不要放在單獨的分區中,以免 OTA 中斷造成問題。進行 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 = (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 映像檔的路徑。如果 BOARD_PREBUILT_DTBIMAGE_DIR
目錄中有多個副檔名為 *.dtb
的檔案,Android 建構系統會串連這些檔案,以建立用於建立開機映像檔的最終 DTB 映像檔。
如要透過 BOARD_PREBUILT_DTBIMAGE_DIR
指定的目錄使用 DTB 映像檔,將引數 dtb
傳遞至 mkbootimg.py
,主面板設定變數 BOARD_INCLUDE_DTB_IN_BOOTIMG
必須設為 true
。舉例來說:
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
您可以將 dtb_offset
引數與其他偏移和標頭版本附加至 BOARD_MKBOOTIMG_ARGS
看板設定變數。舉例來說:
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
回報為零型索引,由系統啟動載入程式從開機映像檔中的 DTB 組合中選取的裝置樹狀結構。