Halaman ini menjelaskan cara men-deploy biner Generic Bootloader (GBL).
Persyaratan firmware booting
Untuk menggunakan GBL, firmware booting harus memenuhi persyaratan berikut:
Kepatuhan terhadap Unified Extensible Firmware Interface (UEFI). Firmware harus menerapkan dan menggunakan protokol UEFI yang diperlukan. Firmware juga harus mengizinkan ekstensi khusus vendor menggunakan protokol UEFI yang ditentukan.
Keamanan. Firmware harus menerapkan semua persyaratan untuk Booting Terverifikasi Android (AVB), sehingga GBL dapat mengautentikasi image booting.
Mode booting. Biner harus dapat menangani berbagai mode booting, seperti booting normal, booting pemulihan, dan fastboot.
Partisi dinamis. Firmware booting harus menerapkan logika pemilihan slot sehingga mendukung pembacaan slot booting A/B yang benar dan kompatibel dengan partisi dinamis dan userdata di super.
Konfigurasi OS. Firmware harus dapat mengubah command line kernel, device tree (DTB), dan bootconfig dengan penyesuaian OEM yang diperlukan untuk melakukan booting perangkat.
Memuat VM yang dilindungi. Biner harus memuat firmware VM yang dilindungi dan telah diverifikasi sebelumnya dengan benar sebelum kernel Android jika ada VM yang dilindungi. Untuk informasi lebih lanjut, lihat urutan booting Microdroid.
Manajemen memori. Firmware booting harus mendukung API alokasi memori UEFI.
Persyaratan penerapan
Agar GBL diterapkan dengan benar di perangkat Anda, Anda harus memenuhi persyaratan berikut:
Perangkat Anda harus berisi dua partisi FAT32 berukuran 4 MB (atau lebih besar) bernama
android_esp_adanandroid_esp_bpada perangkat blok yang dapat diakses oleh SOC.- Perangkat blok adalah perangkat penyimpanan yang dapat dibaca atau ditulis dalam unit blok. Contohnya mencakup perangkat UFS, eMMC, dan kartu SD.
- FAT32 digunakan karena merupakan sistem file yang umum dan mudah digunakan.
- Kedua partisi diperlukan untuk update dan rollback over-the-air (OTA) selama durasi jendela dukungan versi Android ini.
- GBL berukuran sekitar 2 MB jika tidak dikompresi. 4 MB sudah cukup untuk memperhitungkan pertumbuhan apa pun karena fitur tambahan selama tujuh tahun ke depan.
- Jika ada update GBL, Anda harus memperbarui seluruh partisi
android_esp_${SLOT_SUFFIX}. Update khusus GBL tidak didukung oleh OTA Android.
Versi GBL yang di-deploy harus merupakan build produksi bersertifikasi terbaru dari cabang rilis GBL yang sesuai. Sebaiknya Anda menandatangani salinan GBL bersertifikasi Google menggunakan solusi penandatanganan pilihan Anda dan menyimpan build yang dihasilkan dan metadata tanda tangan di dalam partisi
android_esp_${SLOT_SUFFIX}.- Sertifikat GBL HARUS dibiarkan utuh oleh tanda tangan OEM DAN tidak boleh ada header yang diterapkan pada biner.
- Build GBL developer digunakan secara ketat untuk tujuan pengembangan dan debug. Build tidak dapat dikirim dan tidak akan disertifikasi oleh Google.
GBL harus disimpan di jalur
/EFI/BOOT/BOOTAA64.EFIdalam partisi FAT32.Terapkan protokol UEFI dan Android UEFI yang diperlukan untuk mendukung GBL. Build produksi GBL gagal di-boot jika antarmuka ini tidak didukung.
EFI_BLOCK_IO_PROTOCOLatauEFI_BLOCK_IO2_PROTOCOLmengambil image boot dan image pvmfw dari diskEFI_RNG_PROTOCOLuntuk kanari stack, seed KASLR, dan seed RNG- Layanan Alokasi Memori untuk alokasi memori sementara guna melakukan komputasi AVB dan DICE
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOLmenyediakan opsi untuk penerapan no-op, tetapi GBL mencatat melalui protokol ini secara defaultGBL_EFI_AVB_PROTOCOLmengakses kunci publik dan indeks rollback untuk memverifikasi image bootingGBL_EFI_BOOT_CONTROL_PROTOCOLmendapatkan metadata slot dan alasan booting dari firmwareGBL_EFI_AVF_PROTOCOLmenghasilkan data konfigurasi AVF dari rantai DICE
Protokol UEFI yang sangat direkomendasikan saat mengintegrasikan GBL didokumentasikan dalam Protokol UEFI GBL.
Dukungan firmware booting
Dengan modifikasi yang diperlukan untuk mendukung persyaratan di bagian sebelumnya, implementasi firmware UEFI berikut berfungsi dengan GBL:
- EDK2 (Tianocore). EDK2 adalah implementasi UEFI open source yang populer. Dukungan GBL diperlukan untuk bootloader berbasis EDK2, dan dukungan UEFI sudah ada.
- U-Boot. Project bootloader open source yang fleksibel dan banyak digunakan yang mendapatkan kompatibilitas UEFI untuk penggunaan GBL.
- LittleKernel (LK). Bootloader open source yang digunakan oleh beberapa vendor.
Menjalankan GBL
Anda dapat memperoleh biner GBL bawaan untuk dijalankan atau membangun biner Anda sendiri dan menjalankannya.
Mendapatkan dan menjalankan program biner GBL
GBL didistribusikan sebagai biner aplikasi UEFI tunggal. Anda dapat mengupdate biner ini secara terpisah dari firmware dasar perangkat menggunakan mekanisme update standar Android.
Mulai Android 16, jika Anda mengirimkan perangkat berdasarkan chipset ARM-64, sebaiknya Anda men-deploy versi bersertifikasi Google terbaru GBL dan mengintegrasikannya ke dalam rantai booting Anda.
Membangun GBL
Untuk membuat GBL:
Pastikan Anda telah menginstal alat repo dan bootstrap Bazel:
sudo apt install repo bazel-bootstrapLakukan inisialisasi direktori saat ini untuk kontrol sumber menggunakan file manifes
uefi-gbl-mainline:repo init -u https://android.googlesource.com/kernel/manifest -b uefi-gbl-mainline repo sync -j16Bangun aplikasi UEFI:
tools/bazel run //bootable/libbootloader:gbl_efi_dist
Menguji GBL di Perangkat Virtual Android
Menjalankan GBL dalam Cuttlefish:
cvd start --android_efi_loader=path_to_the_UEFI_app ...Command
cvd startini menggunakan aplikasi UEFI untuk mem-booting Android, bukan mem-booting Android secara langsung.
Mengajukan bug dan menghubungi tim bootloader
Untuk melaporkan bug GBL, buka komponen Android Generic Bootloader di Buganizer.
Jika ada pertanyaan, hubungi tim GBL, kirim email ke android-gbl@google.com.