Образы для восстановления

На устройствах, не поддерживающих A/B-обновления, образ восстановления должен содержать информацию из файла дерева устройств (DTB) или образа наложения Advanced Configuration and Power Interface (ACPI) . При загрузке таких устройств в режим восстановления загрузчик может загрузить образ наложения, совместимый с образом восстановления. Устройства, поддерживающие A/B (бесшовные) обновления , должны использовать режим восстановления в качестве загрузочного раздела вместо отдельного раздела восстановления (подробнее см. раздел «Реализация A/B-обновлений »).

Параметры включения DTBO/ACPIO восстановления в состав образа загрузки/восстановления различаются в зависимости от версии Android.

Выпускать Схема обновления соответствие GKI Версия заголовка загрузки (устройства запуска) Версия заголовка загрузки (для устройств обновления) Требуется специальный образ для восстановления.
11 А/Б,
Виртуальный A/B
Да 3 * Н/Д Нет
А/Б,
Виртуальный A/B
Нет 2, 3 0, 1, 2, 3 Нет
не-А/В Да 3 Н/Д Да
не-А/В Нет 2, 3 0, 1, 2, 3 Да
10 (Q) А/Б Н/Д 2 0, 1, 2 Нет
не-А/В Н/Д 2 0, 1, 2 Да
9 (P) А/Б Н/Д 1 0, 1 Нет
не-А/В Н/Д 1 0, 1 Да
8 (О) А/Б Н/Д Н/Д (считается 0) Н/Д (считается 0) Нет
не-А/В Н/Д Н/Д (считается 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 страниц) m = ( ramdisk_size + page_size - 1) / page_size
Загрузчик второго этапа (n страниц) n = ( second_size + page_size - 1) / page_size
Восстановление DTBO или ACPIO (0 страниц) o = ( recovery_[dtbo|acpio]_size + page_size - 1) / page_size

Подробную информацию об аргументах инструмента mkbootimg для указания версии заголовка загрузочного образа и путей к образам наложения см. в разделе «Версионирование заголовка загрузочного образа» .

Внедрить DTBO

Устройства, не относящиеся к классам A/B и работающие под управлением Windows 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 .