Изображения DTB

Реализации Android могут включать образ большого двоичного объекта дерева устройств (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 объединялись один за другим. Загрузчик использует поле totalsize в каждом заголовке FDT для чтения и анализа соответствующего большого двоичного объекта.

  • Разделы DTB/DTBO. У загрузчика есть эффективный способ выбрать правильный большой двоичный объект DT, проверив структуру dt_table_entry (содержит id , rev и custom поля), которая может содержать информацию об оборудовании, идентифицирующую запись). Дополнительные сведения см. в разделе Разделы DTB/DTBO .

Включение образа DTB в загрузочный образ

Устройства под управлением Android 10 могут включать образ DTB в загрузочный образ. Это избавляет Android от необходимости поддерживать сценарии, добавляющие образ DTB к image.gz в ядре, и позволяет использовать тест Vendor Test Suite (VTS) для проверки (и стандартизации) размещения DTB.

Кроме того, для устройств, отличных от A/B, безопаснее иметь DTB как часть образа восстановления, а не в отдельном разделе, чтобы предотвратить проблемы, вызванные прерванными OTA. Во время OTA, если проблема возникает после обновления раздела DTB (но до завершения полного обновления), устройство пытается загрузиться в режиме восстановления для завершения OTA; однако, поскольку раздел DTB уже был обновлен, может возникнуть несоответствие с образом восстановления (который еще не был обновлен). Наличие образа DTB как части формата загрузочного образа предотвращает такие проблемы, делая образ восстановления самодостаточным (то есть он не зависит от другого раздела).

Структура загрузочного образа

Устройства под управлением Android 10 могут включать образ DTB, используя следующую структуру загрузочного образа.

Раздел загрузочного образа Количество страниц
Загрузочный заголовок (1 страница) 1
Ядро (л стр.) l = ( kernel_size + page_size - 1) / page_size
Рамдиск (м страниц) m = ( ramdisk_size + page_size - 1) / page_size
Загрузчик второго этапа (n страниц) n = ( second_size + page_size - 1) / page_size
Восстановление DTBO (страниц) о = ( recovery_dtbo_size + page_size - 1) / page_size
ДТБ (стр.) 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, используемого при создании загрузочного образа.

Чтобы передать аргумент dtb в mkbootimg.py с образом DTB из каталога, указанного BOARD_PREBUILT_DTBIMAGE_DIR , для переменной конфигурации платы 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, присутствующих в загрузочном образе.