Implementa GBL

En esta página, se explica cómo implementar el binario de GBL.

Requisitos del firmware de inicio

Para usar GBL, el firmware de arranque debe cumplir con los siguientes requisitos:

  • Cumplimiento de UEFI El firmware debe implementar y usar los protocolos UEFI requeridos. El firmware también debe permitir extensiones específicas del proveedor con protocolos UEFI definidos.

  • Seguridad El firmware debe implementar todos los aspectos del inicio verificado de Android (AVB), lo que garantiza que solo se carguen imágenes autenticadas.

  • Modos de inicio El binario debe poder controlar varios modos de inicio, como el inicio normal, el inicio de recuperación y el inicio rápido.

  • Partición dinámica. El firmware de inicio debe implementar la lógica de selección de ranuras para que admita la lectura del espacio de inicio A/B correcto y sea compatible con las particiones dinámicas y los datos del usuario en super.

  • Configuración del SO El firmware debe ser capaz de modificar la línea de comandos del kernel, el árbol de dispositivos (DTB) y el bootconfig con las personalizaciones del OEM necesarias para iniciar el dispositivo.

  • Carga de VMs protegidas. El objeto binario debe cargar correctamente el firmware de la VM protegida previamente verificado antes del kernel de Android en presencia de VMs protegidas. Para obtener más información, consulta la secuencia de inicio de Microdroid.

  • Administración de la memoria. El firmware de arranque debe admitir la API de asignación de memoria de UEFI.

  • Compatibilidad y retrocompatibilidad El firmware debe funcionar en dispositivos con diferentes proveedores y SoC, y mantener la retrocompatibilidad con la versión de Android correspondiente.

Compatibilidad con el firmware de inicio

Con las modificaciones necesarias para admitir los requisitos de la sección anterior, las siguientes implementaciones de firmware UEFI funcionan con el GBF:

  • EDK2 (Tianocore). Un EDK2 es una implementación popular de UEFI de código abierto. Se necesita compatibilidad con GBL para los bootloaders basados en EDK2, y ya existe compatibilidad con UEFI.
  • U-Boot. Es un proyecto de bootloader de código abierto flexible y muy usado que está ganando compatibilidad con UEFI para el uso de GBL.
  • LittleKernel (LK). Es un bootloader de código abierto que usan algunos proveedores.

Ejecuta GBL

Puedes obtener un objeto binario GBL compilado previamente para ejecutarlo o compilar el tuyo y ejecutarlo.

Obtén y ejecuta el objeto binario de GBL

La GBL se distribuye como un solo objeto binario de la app de EFI. Puedes actualizar este objeto binario de forma independiente del firmware base del dispositivo con el mecanismo de actualización estándar de Android.

A partir de Android 16, si envías un dispositivo basado en un chipset ARM-64, te recomendamos que implementes la versión más reciente de GBL firmada por Google y la integres en tu cadena de arranque.

Compila y ejecuta la GBL

Para compilar y ejecutar la GBL, haz lo siguiente:

  1. Verifica que tengas instaladas la herramienta de repo y el arranque de Bazel:

    sudo apt install repo bazel-bootstrap
    
  2. Inicializa tu directorio actual para el control de código fuente con el archivo de manifiesto uefi-gbl-mainline:

    repo init -u https://android.googlesource.com/kernel/manifest -b uefi-gbl-mainline
    repo sync -j16
    
  3. Compila la app de EFI:

    ./tools/bazel run //bootable/libbootloader:gbl_efi_dist --extra_toolchains=@gbl//toolchain:all
    
  4. Ejecuta la app de EFI en Cuttlefish:

    cvd start --android_efi_loader=path_to_the_EFI_app ...
    

    En lugar de iniciar Android directamente, este comando cvd start usa la app de EFI para iniciar Android.

Informa los errores y comunícate con el equipo del bootloader

Para informar un error de GBL, navega al componente del cargador de arranque genérico de Android en Buganizer.

Si tienes preguntas, comunícate con el equipo de GBL y envía un correo electrónico a android-gbl@google.com.