Реализации 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 |
Восстановление ДТБО (о стр.) | o = ( recovery_dtbo_size + page_size - 1) / page_size |
DTB (стр.) | 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, присутствующих в загрузочном образе.
Реализации 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 |
Восстановление ДТБО (о стр.) | o = ( recovery_dtbo_size + page_size - 1) / page_size |
DTB (стр.) | 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, присутствующих в загрузочном образе.