Questa pagina spiega come eseguire il deployment del binario Generic Bootloader (GBL).
Requisiti del firmware di avvio
Per utilizzare GBL, il firmware di avvio deve soddisfare i seguenti requisiti:
Conformità a Unified Extensible Firmware Interface (UEFI). Il firmware deve implementare e utilizzare i protocolli UEFI richiesti. Il firmware deve anche consentire estensioni specifiche del fornitore utilizzando protocolli UEFI definiti.
Sicurezza Il firmware deve implementare tutti i requisiti per l'avvio verificato di Android (AVB), consentendo a GBL di autenticare le immagini di avvio.
Modalità di avvio. Il binario deve essere in grado di gestire varie modalità di avvio, ad esempio avvio normale, avvio del ripristino e fastboot.
Partizionamento dinamico. Il firmware di avvio deve implementare la logica di selezione dello slot in modo da supportare la lettura dello slot di avvio A/B corretto ed essere compatibile con le partizioni dinamiche e i dati utente in super.
Configurazione del sistema operativo. Il firmware deve essere in grado di modificare la riga di comando del kernel, il device tree (DTB) e bootconfig con le personalizzazioni OEM necessarie per avviare il dispositivo.
Caricamento della VM protetta. Il binario deve caricare correttamente il firmware della VM protetta preverificata prima del kernel Android in presenza di VM protette. Per ulteriori informazioni, consulta la sequenza di avvio di Microdroid.
Gestione della memoria. Il firmware di avvio deve supportare l'API di allocazione della memoria UEFI.
Requisiti di implementazione
Per implementare correttamente GBL sul tuo dispositivo, devi soddisfare i seguenti requisiti:
Il dispositivo deve contenere due partizioni FAT32 di 4 MB (o più grandi) denominate
android_esp_aeandroid_esp_bsu un dispositivo a blocchi accessibile dal SOC.- Un dispositivo a blocchi è un dispositivo di archiviazione che può essere letto o scritto in unità di blocchi. Alcuni esempi includono dispositivi UFS, eMMC e schede SD.
- FAT32 viene utilizzato perché è un file system onnipresente e semplice.
- Entrambe le partizioni sono necessarie per gli aggiornamenti over-the-air (OTA) e i rollback per la durata del periodo di supporto di questa versione di Android.
- GBL è di circa 2 MB non compressi. 4 MB sono sufficienti per tenere conto di qualsiasi crescita dovuta a funzionalità aggiuntive nei prossimi sette anni.
- In caso di aggiornamento di GBL, devi aggiornare l'intera
partizione
android_esp_${SLOT_SUFFIX}. Un aggiornamento solo GBL non è supportato da Android OTA.
La versione di GBL di cui è stato eseguito il deployment deve essere l'ultima build di produzione certificata del ramo di release di GBL corrispondente. Ti consigliamo di firmare la copia della GBL certificata da Google utilizzando la tua soluzione di firma preferita e di archiviare i metadati della build e della firma risultanti all'interno della partizione
android_esp_${SLOT_SUFFIX}.- Il certificato GBL DEVE essere lasciato intatto dalla firma OEM e non deve essere applicata alcuna intestazione al binario.
- La build GBL per sviluppatori viene utilizzata esclusivamente a scopo di sviluppo e debug. La build non può essere spedita e non verrà certificata da Google.
Il file GBL deve essere archiviato nel percorso
/EFI/BOOT/BOOTAA64.EFIall'interno della partizione FAT32.Implementa i protocolli UEFI e Android UEFI richiesti per supportare GBL. La build di produzione di GBL non viene avviata se queste interfacce non sono supportate.
EFI_BLOCK_IO_PROTOCOLoEFI_BLOCK_IO2_PROTOCOLrecupera le immagini di avvio e le immagini pvmfw dal discoEFI_RNG_PROTOCOLper stack canary, seed KASLR e seed RNG- Servizi di allocazione della memoria per l'allocazione della memoria scratch per eseguire calcoli AVB e DICE
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOLfornisce un'opzione per le implementazioni no-op, ma GBL registra tramite questo protocollo per impostazione predefinitaGBL_EFI_AVB_PROTOCOLaccede alle chiavi pubbliche e agli indici di rollback per verificare le immagini di avvioGBL_EFI_BOOT_CONTROL_PROTOCOLacquisisce i metadati dello slot e i motivi di avvio dal firmwareGBL_EFI_AVF_PROTOCOLgenera dati di configurazione AVF dalla catena DICE
I protocolli UEFI fortemente consigliati durante l'integrazione di GBL sono documentati in Protocolli UEFI GBL.
Supporto del firmware di avvio
Con le modifiche necessarie per supportare i requisiti della sezione precedente, le seguenti implementazioni del firmware UEFI funzionano con GBL:
- EDK2 (Tianocore). EDK2 è un'implementazione UEFI open source molto diffusa. È necessario il supporto GBL per i bootloader basati su EDK2 e il supporto UEFI è già presente.
- U-Boot. Un progetto di bootloader open source flessibile e ampiamente utilizzato che sta ottenendo la compatibilità UEFI per l'utilizzo di GBL.
- LittleKernel (LK). Un bootloader open source utilizzato da alcuni fornitori.
Esegui GBL
Puoi ottenere un binario GBL precompilato da eseguire o crearne uno personalizzato ed eseguirlo.
Ottenere ed eseguire il programma binario GBL
GBL viene distribuito come singolo binario dell'app UEFI. Puoi aggiornare questo file binario indipendentemente dal firmware di base del dispositivo utilizzando il meccanismo di aggiornamento standard di Android.
A partire da Android 16, se spedisci un dispositivo basato sul chipset ARM-64, ti consigliamo vivamente di implementare l'ultima versione certificata da Google di GBL e di integrarla nella catena di avvio.
Build GBL
Per creare GBL:
Verifica di aver installato lo strumento repo e Bazel bootstrap:
sudo apt install repo bazel-bootstrapInizializza la directory corrente per il controllo del codice sorgente utilizzando il file manifest
uefi-gbl-mainline:repo init -u https://android.googlesource.com/kernel/manifest -b uefi-gbl-mainline repo sync -j16Crea l'app UEFI:
tools/bazel run //bootable/libbootloader:gbl_efi_dist
Testare GBL sul dispositivo virtuale Android
Esegui GBL in Cuttlefish:
cvd start --android_efi_loader=path_to_the_UEFI_app ...Anziché avviare direttamente Android, questo comando
cvd startutilizza l'app UEFI per avviare Android.
Segnalare bug e contattare il team del bootloader
Per segnalare un bug per il GBL, vai al componente Android Generic Bootloader in Buganizer.
Per eventuali domande, contatta il team GBL inviando un'email all'indirizzo android-gbl@google.com.