В реализациях Android может присутствовать образ DTB (device tree blob), используемый загрузчиком. Расположение образа DTB (и параметры для указания параметров образа DTB) различаются в зависимости от версии Android.
В Android 11 устройства, использующие Generic Kernel Image (GKI), должны поддерживать раздел загрузки поставщика , который включает всю информацию, специфичную для поставщика, перемещенную из раздела загрузки. Поскольку образ DTB содержит данные, специфичные для поставщика, он теперь является частью раздела загрузки поставщика. Чтобы указать параметры образа DTB, см. раздел «Заголовок загрузки поставщика» .
In Android 10, devices can include the DTB image in the boot partition. To specify DTB image parameters, see Including the DTB image in the boot image .
In Android 9 and lower, the DTB image can exist in its own partition or be appended to the kernel
image.gzto create the kernel + DTB image (which is then passed tomkbootimgto createboot.img).
формат изображения DTB
In Android 10 and higher, the DTB image must use one of the following formats:
DT blobs concatenated one after the other. The bootloader uses the
totalsizefield in each FDT header to read and parse the corresponding blob.Разделы 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-файла в формате загрузочного образа предотвращает такие проблемы, делая образ восстановления самодостаточным (то есть, он не зависит от другого раздела).
Структура загрузочного образа
Devices running Android 10 can include a DTB image using the following boot image structure.
| Раздел загрузочного изображения | Количество страниц |
|---|---|
| Заголовок страницы (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 (0 страниц) | o = ( recovery_dtbo_size + page_size - 1) / page_size |
| DTB (строк) | p = ( dtb_size + page_size - 1) / page_size |
путь к изображению DTB
For devices running Android 10, you can use the mkbootimg.py tool and the following arguments to specify the path to the DTB image.
| Аргумент | Описание |
|---|---|
dtb | Path to the DTB image to be included in the boot/recovery images. |
dtb_offset | При добавлении к base аргументу указывается физический адрес загрузки для окончательного дерева устройств. Например, если base аргумент равен 0x10000000 , а аргумент dtb_offset равен 0x01000000 , то поле dtb_addr_field в заголовке образа загрузки будет заполнено значением 0x11000000 . |
Для указания пути к образу DTB необходимо использовать переменную конфигурации платы BOARD_PREBUILT_DTBIMAGE_DIR . Если в каталоге 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
You can append the dtb_offset argument to the BOARD_MKBOOTIMG_ARGS board config variable with the other offsets and header version. For example:
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, присутствующих в образе загрузки (отсчет ведется с нуля).