Развернуть ГБЛ

На этой странице объясняется, как развернуть бинарный файл 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:

  1. Убедитесь, что у вас установлены инструмент repo и Bazel bootstrap:

    sudo apt install repo bazel-bootstrap
    
  2. Инициализируйте текущий каталог для системы контроля версий, используя файл манифеста uefi-gbl-mainline :

    repo init -u https://android.googlesource.com/kernel/manifest -b uefi-gbl-mainline
    repo sync -j16
    
  3. Соберите приложение UEFI:

    tools/bazel run //bootable/libbootloader:gbl_efi_dist
    

Протестируйте GBL на виртуальном устройстве Android.

  1. Запустите 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 .