На устройствах, не поддерживающих A/B, образ восстановления должен содержать информацию из BLOB-объекта дерева устройств (DTB) или образа оверлея расширенного интерфейса конфигурации и питания (ACPI) . При загрузке таких устройств в режим восстановления загрузчик может загрузить образ оверлея, совместимый с образом восстановления. Устройства, поддерживающие A/B-обновления (бесшовные), должны использовать режим восстановления в качестве загрузочного, а не отдельный раздел восстановления (подробнее см. в разделе «Реализация обновлений A/B» ).
Варианты включения DTBO/ACPIO восстановления в состав образа загрузки/восстановления различаются в зависимости от версии Android.
| Выпускать | Схема обновления | Соответствие требованиям ГКИ | Версия заголовка загрузки (запуск устройств) | Версия заголовка загрузки (обновление устройств) | Требуется специальный образ для восстановления | 
|---|---|---|---|---|---|
| 11 | А/Б, Виртуальный А/Б | Да | 3 * | Н/Д | Нет | 
| А/Б, Виртуальный А/Б | Нет | 2, 3 | 0, 1, 2, 3 | Нет | |
| не-A/B | Да | 3 | Н/Д | Да | |
| не-A/B | Нет | 2, 3 | 0, 1, 2, 3 | Да | |
| 10 (В) | А/Б | Н/Д | 2 | 0, 1, 2 | Нет | 
| не-A/B | Н/Д | 2 | 0, 1, 2 | Да | |
| 9 (П) | А/Б | Н/Д | 1 | 0, 1 | Нет | 
| не-A/B | Н/Д | 1 | 0, 1 | Да | |
| 8 (О) | А/Б | Н/Д | Н/Д (считается 0) | Н/Д (считается 0) | Нет | 
| не-A/B | Н/Д | Н/Д (считается 0) | Н/Д (считается 0) | Да | 
* Устройства A/B под управлением Android 11 или выше, использующие Generic Kernel Image (GKI), должны использовать основной загрузочный заголовок версии 3 для совместимости с загрузочным разделом поставщика .
Ключевые моменты:
- Устройствам A/B не нужно указывать образ восстановления, поскольку обновления A/B используют два набора разделов (включая - bootи- dtbo) и переключаются между ними во время обновления, устраняя необходимость в образе восстановления. Устройства A/B по-прежнему могут использовать выделенный образ восстановления.
- На устройствах, не относящихся к A/B, с Android 11 или более поздней версией и использующих загрузочный заголовок версии 3, необходимо явно указать загрузочный заголовок версии 2 для образа восстановления отдельно. Например: - BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
- Для архитектур, не поддерживающих деревья устройств, образ восстановления может включать образ ACPIO вместо образа DTBO. 
О сбоях OTA и образах восстановления
Чтобы предотвратить сбои при беспроводном обновлении (OTA) на устройствах, отличных от A/B, образ восстановления должен быть самодостаточным и независимым от других образов. Если во время обновления OTA после обновления образа наложения (но до завершения полного обновления) возникает проблема, устройство пытается загрузиться в режиме восстановления для завершения обновления OTA. Однако, поскольку раздел наложения уже обновлён, может возникнуть несоответствие с образом восстановления (который ещё не обновлён).
Чтобы предотвратить зависимость восстановления от раздела DTBO/ACPIO во время обновления, устройства, не относящиеся к A/B, работающие под управлением Android 9 или более поздней версии, могут указать образ восстановления DTBO/ACPIO, содержащий информацию из образа наложения, в качестве отдельного раздела в формате загрузочного образа (необходимо использовать заголовок загрузчика версии 1 или 2).
Изменения загрузочного образа
Чтобы образ восстановления содержал DTBO или ACPIO для восстановления на устройствах, отличных от A/B, работающих под управлением Android 9 или выше, обновите структуру загрузочного образа следующим образом.
| Раздел загрузочного образа | Количество страниц | 
|---|---|
| Заголовок загрузки (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 или ACPIO (страницы) | o = ( recovery_[dtbo|acpio]_size+page_size- 1) /page_size | 
 Подробную информацию об аргументах инструмента mkbootimg для указания версии заголовка загрузочного образа и путей к образам наложения см. в разделе Управление версиями заголовка загрузочного образа .
Внедрить DTBO
 Устройства, не относящиеся к A/B, с версией 9 или выше могут заполнить раздел recovery_dtbo образа восстановления. Чтобы включить образ recovery_dtbo в recovery.img , в файле BoardConfig.mk устройства выполните следующие действия.
- Установите для конфигурации - BOARD_INCLUDE_RECOVERY_DTBOзначение- true:- BOARD_INCLUDE_RECOVERY_DTBO := true
- Расширьте переменную - BOARD_MKBOOTIMG_ARGS, чтобы указать версию заголовка загрузочного образа:- BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
- Убедитесь, что переменная - BOARD_PREBUILT_DTBOIMAGEуказывает путь к образу DTBO. Система сборки Android использует эту переменную для установки аргумента- recovery_dtboинструмента- mkbootimgпри создании образа восстановления.
 Если переменные BOARD_INCLUDE_RECOVERY_DTBO , BOARD_MKBOOTIMG_ARGS и BOARD_PREBUILT_DTBOIMAGE установлены правильно, система сборки Android включает DTBO, указанный переменной BOARD_PREBUILT_DTBOIMAGE , в recovery.img .
Реализовать ACPIO
 Устройства, не относящиеся к A/B, под управлением Android 9 и выше могут использовать образ наложения ACPIO (вместо образа DTBO) и заполнять раздел recovery_acpio (вместо раздела recovery_dtbo ) образа восстановления. Чтобы включить образ recovery_acpio в recovery.img , в файле BoardConfig.mk устройства выполните следующие действия.
- Установите для конфигурации - BOARD_INCLUDE_RECOVERY_ACPIOзначение- true:- BOARD_INCLUDE_RECOVERY_ACPIO := true
- Расширьте переменную - BOARD_MKBOOTIMG_ARGS, чтобы указать версию заголовка загрузочного образа. Для поддержки восстановления ACPIO значение переменной должно быть больше или равно 1.- BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
- Убедитесь, что переменная - BOARD_RECOVERY_ACPIOсодержит путь к образу ACPIO. Система сборки Android использует эту переменную для установки аргумента- recovery_acpioинструмента- mkbootimgпри создании образа восстановления.
 Если переменные BOARD_INCLUDE_RECOVERY_ACPIO , BOARD_MKBOOTIMG_ARGS и BOARD_RECOVERY_ACPIO установлены правильно, система сборки Android включает ACPIO, указанный переменной BOARD_RECOVERY_ACPIO в recovery.img .
