Implantar o GBL

Nesta página, explicamos como implantar o binário da GBL.

Requisitos de firmware de inicialização

Para usar o GBL, o firmware de inicialização precisa atender aos seguintes requisitos:

  • Conformidade com a UEFI. O firmware precisa implementar e usar os protocolos UEFI necessários. O firmware também precisa permitir extensões específicas do fornecedor usando protocolos UEFI definidos.

  • Segurança. O firmware precisa implementar todos os aspectos da inicialização verificada do Android (AVB, na sigla em inglês), garantindo que apenas imagens autenticadas sejam carregadas.

  • Modos de inicialização. O binário precisa ser capaz de processar vários modos de inicialização, como inicialização normal, de recuperação e fastboot.

  • Particionamento dinâmico. O firmware de inicialização precisa implementar a lógica de seleção de slots para suportar a leitura do slot de inicialização A/B correto e ser compatível com partições dinâmicas e dados do usuário em super.

  • Configuração do SO. O firmware precisa ser capaz de modificar a linha de comando do kernel, a árvore de dispositivos (DTB) e a configuração de inicialização com as personalizações do OEM necessárias para inicializar o dispositivo.

  • Carregando a VM protegida. O binário precisa carregar corretamente o firmware da VM protegida pré-verificada antes do kernel do Android na presença de VMs protegidas. Para mais informações, consulte a sequência de inicialização do Microdroid.

  • Gerenciamento de memória. O firmware de inicialização precisa ser compatível com a API de alocação de memória UEFI.

  • Compatibilidade e compatibilidade com versões anteriores. O firmware precisa funcionar em dispositivos com diferentes fornecedores e SOCs, além de manter a compatibilidade com versões anteriores da versão correspondente do Android.

Suporte a firmware de inicialização

Com as modificações necessárias para atender aos requisitos da seção anterior, as seguintes implementações de firmware UEFI funcionam com o GBF:

  • EDK2 (Tianocore). O EDK2 é uma implementação UEFI de código aberto muito usada. O suporte a GBL é necessário para carregadores de inicialização baseados em EDK2, e o suporte a UEFI já está presente.
  • U-Boot. Um projeto de carregador de inicialização de código aberto flexível e amplamente usado que está ganhando compatibilidade com UEFI para uso do GBL.
  • LittleKernel (LK). Um carregador de inicialização de código aberto usado por alguns fornecedores.

Executar GBL

Você pode conseguir um binário GBL pré-criado para executar ou criar o seu próprio e executá-lo.

Receber e executar o binário da GBL

O GBL é distribuído como um único binário de app EFI. É possível atualizar esse binário de forma independente do firmware base do dispositivo usando o mecanismo de atualização padrão do Android.

A partir do Android 16, se você enviar um dispositivo baseado no chipset ARM-64, recomendamos implantar a versão mais recente assinada pelo Google do GBL e integrá-la à sua cadeia de inicialização.

Criar e executar o GBL

Para criar e executar o GBL:

  1. Verifique se você tem a ferramenta repo e o bootstrap do Bazel instalados:

    sudo apt install repo bazel-bootstrap
    
  2. Inicialize o diretório atual para controle de origem usando o arquivo de manifesto uefi-gbl-mainline:

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

    ./tools/bazel run //bootable/libbootloader:gbl_efi_dist --extra_toolchains=@gbl//toolchain:all
    
  4. Execute o app EFI no Cuttlefish:

    cvd start --android_efi_loader=path_to_the_EFI_app ...
    

    Em vez de inicializar o Android diretamente, o comando cvd start usa o app EFI para inicializar o Android.

Enviar bugs e entrar em contato com a equipe do carregador de inicialização

Para informar um bug do GBL, acesse o componente Android Generic Bootloader no Buganizer.

Em caso de dúvidas, entre em contato com a equipe da GBL enviando um e-mail para android-gbl@google.com.