На этой странице объясняется, как развернуть бинарный файл Generic Bootloader (GBL).
Требования к загрузочному прошиванию
Для использования GBL загрузочная микропрограмма должна соответствовать следующим требованиям:
Соответствие стандарту UEFI (Unified Extensible Firmware Interface). Прошивка должна реализовывать и использовать необходимые протоколы UEFI. Прошивка также должна допускать расширения, специфичные для производителя, с использованием определенных протоколов UEFI.
Безопасность. Прошивка должна соответствовать всем требованиям Android Verified Boot (AVB), что позволит GBL аутентифицировать загрузочные образы.
Режимы загрузки. Исполняемый файл должен поддерживать различные режимы загрузки, такие как обычная загрузка, загрузка в режиме восстановления и быстрая загрузка.
Динамическое разбиение на разделы. Загрузочная прошивка должна реализовывать логику выбора слота, чтобы поддерживать чтение правильного загрузочного слота A/B и быть совместимой с динамическими разделами и пользовательскими данными в суперсистеме.
Конфигурация ОС. Прошивка должна поддерживать изменение командной строки ядра, дерева устройств (DTB) и bootconfig с учетом настроек OEM, необходимых для загрузки устройства.
Загрузка защищенной виртуальной машины. При наличии защищенных виртуальных машин исполняемый файл должен корректно загружать предварительно проверенную прошивку защищенной виртуальной машины перед ядром Android. Для получения дополнительной информации см. последовательность загрузки Microdroid.
Управление памятью. Загрузочная микропрограмма должна поддерживать API распределения памяти UEFI.
Требования к реализации
Для корректной работы GBL на вашем устройстве необходимо выполнить следующие требования:
Ваше устройство должно содержать два раздела FAT32 размером 4 МБ (или больше), названные
android_esp_aиandroid_esp_bрасположенные на блочном устройстве, доступном для SOC.- Блочное устройство — это запоминающее устройство, с которого можно считывать или записывать данные блоками. Примерами являются UFS, eMMC и SD-карты.
- Используется файловая система FAT32, поскольку она широко распространена и проста в использовании.
- Оба раздела необходимы для беспроводных обновлений (OTA) и откатов в течение всего периода поддержки этой версии Android.
- В несжатом виде GBL составляет приблизительно 2 МБ. 4 МБ достаточно для учета возможного роста объема за счет добавления новых функций в течение следующих семи лет.
- В случае обновления GBL необходимо обновить весь раздел
android_esp_${SLOT_SUFFIX}. Обновление только GBL не поддерживается Android OTA.
Развернутая версия GBL должна быть последней сертифицированной производственной сборкой из соответствующей ветки релизов GBL. Мы рекомендуем подписать сертифицированную Google копию GBL, используя предпочитаемое вами решение для подписи, и сохранить полученные метаданные сборки и подписи в разделе
android_esp_${SLOT_SUFFIX}.- Сертификат GBL ДОЛЖЕН оставаться неизменным, включая подпись OEM-производителя, И к бинарному файлу не должен быть добавлен заголовок.
- Сборка GBL для разработчиков используется исключительно в целях разработки и отладки. Эта сборка не может быть выпущена в продажу и не будет сертифицирована Google.
Файл GBL должен храниться по пути
/EFI/BOOT/BOOTAA64.EFIвнутри раздела FAT32.Реализуйте необходимые протоколы UEFI и Android UEFI для поддержки GBL. Если эти интерфейсы не поддерживаются, производственная сборка GBL не запустится.
-
EFI_BLOCK_IO_PROTOCOLилиEFI_BLOCK_IO2_PROTOCOLзагружают образы загрузки и образы pvmfw с диска. -
EFI_RNG_PROTOCOLдля стековых канареек, сидов KASLR и сидов RNG - Сервисы выделения памяти для выделения временной памяти для выполнения вычислений AVB и DICE.
- Протокол
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOLпредоставляет опцию для реализаций, не выполняющих никаких действий, но GBL по умолчанию ведет журнал через этот протокол. -
GBL_EFI_AVB_PROTOCOLобращается к открытым ключам и индексам отката для проверки образов загрузки. -
GBL_EFI_BOOT_CONTROL_PROTOCOLполучает метаданные слота и причины загрузки из микропрограммы. -
GBL_EFI_AVF_PROTOCOLгенерирует данные конфигурации AVF из цепочки DICE.
-
Протоколы UEFI, которые настоятельно рекомендуются при интеграции GBL, описаны в разделе «Протоколы UEFI для GBL» .
Поддержка загрузочного программного обеспечения
С учетом необходимых изменений для поддержки требований, изложенных в предыдущем разделе, следующие реализации прошивки UEFI работают с GBL:
- EDK2 (Tianocore) . EDK2 — популярная реализация UEFI с открытым исходным кодом. Для загрузчиков на основе EDK2 необходима поддержка GBL, а поддержка UEFI уже присутствует.
- U-Boot — гибкий и широко используемый проект загрузчика с открытым исходным кодом, который получает совместимость с UEFI для использования в GBL.
- LittleKernel (LK) . Загрузчик с открытым исходным кодом, используемый некоторыми производителями.
Запустите GBL
Вы можете получить предварительно собранный бинарный файл GBL для запуска или собрать свой собственный и запустить его.
Получите и запустите исполняемый файл GBL.
GBL распространяется как единый исполняемый файл приложения UEFI. Вы можете обновить этот файл независимо от базовой прошивки устройства, используя стандартный механизм обновления Android.
Начиная с Android 16, если вы поставляете устройство на базе чипсета ARM-64, мы настоятельно рекомендуем использовать последнюю сертифицированную Google версию GBL и интегрировать её в цепочку загрузки.
Создать GBL
Для сборки GBL:
Убедитесь, что у вас установлены инструмент repo и Bazel bootstrap:
sudo apt install repo bazel-bootstrapИнициализируйте текущий каталог для системы контроля версий, используя файл манифеста
uefi-gbl-mainline:repo init -u https://android.googlesource.com/kernel/manifest -b uefi-gbl-mainline repo sync -j16Соберите приложение UEFI:
tools/bazel run //bootable/libbootloader:gbl_efi_dist
Протестируйте GBL на виртуальном устройстве Android.
Запустите GBL в Cuttlefish:
cvd start --android_efi_loader=path_to_the_UEFI_app ...Вместо прямой загрузки Android, эта команда
cvd startиспользует приложение UEFI для загрузки Android.
Сообщайте об ошибках и связывайтесь с командой разработчиков загрузчика.
Чтобы сообщить об ошибке в GBL, перейдите к компоненту Android Generic Bootloader в Buganizer .
По всем вопросам обращайтесь в команду GBL, отправив электронное письмо по адресу android-gbl@google.com .