Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

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結構(包含idrevcustom字段)可以有效地選擇正確的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 =( 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參數是0x10000000dtb_offset參數是0x01000000dtb_addr_field在引導映像報頭被填充為0x11000000

電路板配置變量BOARD_PREBUILT_DTBIMAGE_DIR必須用於指定DTB映像的路徑。如果目錄BOARD_PREBUILT_DTBIMAGE_DIR存在多個擴展名為*.dtb的文件,則Android構建系統BOARD_PREBUILT_DTBIMAGE_DIR這些文件連接起來以創建用於啟動映像創建的最終DTB映像。

要將參數dtb與來自BOARD_PREBUILT_DTBIMAGE_DIR指定的目錄中的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集中選擇的設備樹的從零開始的索引。