Questa pagina spiega come eseguire il deployment del file binario del bootloader generico (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 i 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 programma binario deve essere in grado di gestire varie modalità di avvio, come l'avvio normale, l'avvio di 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, l'albero dei dispositivi (DTB) e la configurazione di avvio con le personalizzazioni OEM necessarie per avviare il dispositivo.
Caricamento della VM protetta Il file binario deve caricare correttamente il firmware della VM protetta preverificato prima del kernel Android in presenza di VM protette. Per ulteriori informazioni, consulta 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 dispositivo, devi soddisfare i seguenti requisiti:
Il dispositivo deve contenere due partizioni FAT di 8 MB (o più) denominate
android_esp_aeandroid_esp_bsu un dispositivo a blocchi accessibile dal SOC.- Un dispositivo a blocchi è un dispositivo di archiviazione da cui è possibile leggere o scrivere in unità di blocchi. Esempi includono dispositivi UFS, eMMC e schede SD.
- FAT viene utilizzato perché è un file system onnipresente e semplice.
- Ti consigliamo di scegliere il file system FAT più adatto alle tue esigenze tra FAT12, FAT16 e FAT32.
- Entrambe le partizioni sono necessarie per gli aggiornamenti over-the-air (OTA) e i rollback per la durata della finestra di supporto di questa versione di Android.
- GBL è di circa 2 MB non compressi. 8 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}. L'aggiornamento solo di GBL non è supportato da Android OTA. - Il GUID del tipo di partizione utilizzato per entrambe le partizioni FAT deve corrispondere al GUID della partizione di sistema EFI
C12A7328-F81F-11D2-BA4B-00A0C93EC93B.
La versione di GBL di cui è stato eseguito il deployment deve essere l'ultima build di produzione certificata del ramo di release GBL corrispondente. Ti consigliamo di firmare la copia di GBL certificata da Google utilizzando la soluzione di firma che preferisci e di archiviare la build risultante e i metadati della firma 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 programma binario.
- La build GBL dello sviluppatore viene utilizzata esclusivamente per scopi di sviluppo e debug. La build non può essere spedita e non verrà certificata da Google.
GBL deve essere archiviato nel percorso
/EFI/BOOT/BOOTAA64.EFIall'interno della partizione FAT.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 i canarini dello stack, i semi KASLR e i semi RNG- Servizi di allocazione della memoria per l'allocazione della memoria temporanea per eseguire i calcoli AVB e DICE
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOLfornisce un'opzione per le implementazioni no-op, ma GBL registra i log 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 i 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 nella sezione precedente, le seguenti implementazioni del firmware UEFI funzionano con GBL:
- EDK2 (Tianocore). EDK2 è un'implementazione UEFI open source molto diffusa. È necessario il supporto di 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 acquisendo la compatibilità UEFI per l'utilizzo di GBL.
- LittleKernel (LK). Un bootloader open source utilizzato da alcuni fornitori.
Esegui GBL
Puoi ottenere un programma binario GBL precompilato da eseguire o crearne uno tuo ed eseguirlo.
Ottieni ed esegui il programma binario GBL
GBL viene distribuito come un singolo programma binario dell'app UEFI. Puoi aggiornare questo file binario indipendentemente dal firmware di base del dispositivo utilizzando il meccanismo di aggiornamento standard di Android.
Crea GBL
Per creare GBL:
Verifica di aver installato lo strumento repo e il bootstrap di Bazel:
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
Testa GBL su Android Virtual Device
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.
Segnala bug e contatta il team del bootloader
Per segnalare un bug per GBL, vai al componente Bootloader generico di Android in Buganizer.
Per eventuali domande, contatta il team GBL inviando un'email all'indirizzo android-gbl@google.com.