Для реализации беспроводных обновлений (OTA) загрузчик должен иметь доступ к RAM-диску восстановления во время загрузки. Если устройство использует неизменённый образ восстановления AOSP, загрузчик считывает первые 32 байта в разделе misc ; если данные в нём соответствуют boot-recovery , загрузчик загружает образ recovery . Этот метод позволяет продолжить выполнение любых запланированных задач восстановления (например, применение OTA или удаление данных).
Подробную информацию о содержимом блока флэш-памяти, используемого для связи между восстановлением и загрузчиком, см. в файле bootable/recovery/bootloader_message/bootloader_message.h .
Устройства с обновлениями A/B
Для поддержки обновлений OTA на устройствах, использующих обновления A/B , убедитесь, что загрузчик устройства соответствует следующим критериям.
Общие критерии
- Все разделы, обновленные через OTA, должны обновляться во время загрузки основной системы (и не обновляться в процессе восстановления). 
- Для загрузки - systemраздела загрузчик передает следующее значение в командную строку ядра:- ro root=/dev/[node] rootwait init=/init.
- Вызов функции - markBootSuccessfulиз HAL — обязанность фреймворка Android. Загрузчик никогда не должен отмечать раздел как успешно загруженный.
Поддержка управления загрузкой HAL
 Загрузчик должен поддерживать уровень HAL boot_control , как определено в hardware/libhardware/include/hardware/boot_control.h . Программа обновления запрашивает уровень HAL управления загрузкой , обновляет неиспользуемый загрузочный слот, изменяет активный слот с помощью уровня HAL и перезагружается в обновлённую операционную систему. Подробнее см. в разделе «Реализация уровня HAL управления загрузкой» .
Поддержка слотов
Загрузчик должен поддерживать функциональность, связанную с разделами и слотами, включая:
- Имена разделов должны включать суффикс, указывающий, какие разделы принадлежат конкретному слоту в загрузчике. Для каждого такого раздела существует соответствующая переменная - has-slot: partition base nameзначением- yes. Слоты именуются в алфавитном порядке: a, b, c и т. д., что соответствует разделам с суффиксом- _a,- _b,- _cи т. д. Загрузчик должен сообщить операционной системе, какой слот был загружен, с помощью свойства командной строки- androidboot.slot_suffix. Это свойство задаётся через bootconfig для устройств с Android 12 и выше.
- Значение - slot-retry-countсбрасывается до положительного значения (обычно- 3) либо HAL-уровнем управления загрузкой через функцию обратного вызова- setActiveBootSlot, либо командой- fastboot set_active. При изменении раздела, входящего в слот, загрузчик сбрасывает состояние «successfully booted» и сбрасывает счётчик повторных попыток для слота.
Загрузчик также должен определить, какой слот загружать. На рисунке показан пример процесса принятия решения.

- Определите, какой слот использовать. Не пытайтесь загрузить слот, помеченный как - slot-unbootable. Этот слот должен соответствовать значениям, возвращаемым fastboot, и называется текущим слотом.
- Если текущий слот не отмечен как - slot-successfulи имеет значение- slot-retry-count = 0, отметьте текущий слот как- slot-unbootable. Затем выберите другой слот, не отмеченный как- unbootableи отмеченный как- slot-successful; теперь выбранным слотом будет этот слот. Если текущий слот недоступен, загрузитесь в режиме восстановления или выведите пользователю понятное сообщение об ошибке.
- Выберите соответствующий - boot.imgи укажите путь к правильному системному разделу в командной строке ядра.
- Заполните параметр - slot_suffixкомандной строки ядра.
- Загрузка. Если - slot-successfulне отмечен, уменьшите- slot-retry-count.
 Утилита fastboot определяет, какой раздел нужно прошить, при выполнении любых команд прошивки. Например, при запуске команды fastboot flash system system.img сначала запрашивается переменная current-slot , а затем результат добавляется к переменной system для генерации имени раздела, который нужно прошить ( system_a , system_b и т. д.).
 При установке текущего слота с помощью команды fastboot set_active или команды управления загрузкой HAL setActiveBootSlot загрузчик должен обновить текущий слот, очистить slot-unbootable и slot-successful и сбросить счетчик повторов (это единственный способ очистить slot-unbootable ).
Устройства без обновлений A/B
Для поддержки обновлений OTA на устройствах, не использующих обновления A/B (см. Устройства, не поддерживающие обновление A/B ), убедитесь, что загрузчик устройства соответствует следующим критериям.
- Раздел - recoveryдолжен содержать образ, способный считывать образ системы из какого-либо поддерживаемого раздела (- cache,- userdata) и записывать его в- systemраздел.
- Загрузчик должен поддерживать загрузку непосредственно в режим восстановления. 
- Если обновления образа радио поддерживаются, раздел - recoveryтакже должен поддерживать прошивку радио. Это можно сделать одним из двух способов:- Загрузчик прошивает радио. В этом случае должна быть возможность перезагрузиться из раздела восстановления обратно в загрузчик для завершения обновления. 
- Образ восстановления прошивает радио. Эта функция может быть реализована в виде двоичной библиотеки или утилиты. 
 
