Men-deploy GBL

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_a dan android_esp_b pada 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.EFI dalam 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_PROTOCOL atau EFI_BLOCK_IO2_PROTOCOL mengambil image boot dan image pvmfw dari disk
    • EFI_RNG_PROTOCOL untuk kanari stack, seed KASLR, dan seed RNG
    • Layanan Alokasi Memori untuk alokasi memori sementara guna melakukan komputasi AVB dan DICE
    • EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL menyediakan opsi untuk penerapan no-op, tetapi GBL mencatat melalui protokol ini secara default
    • GBL_EFI_AVB_PROTOCOL mengakses kunci publik dan indeks rollback untuk memverifikasi image booting
    • GBL_EFI_BOOT_CONTROL_PROTOCOL mendapatkan metadata slot dan alasan booting dari firmware
    • GBL_EFI_AVF_PROTOCOL menghasilkan 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:

  1. Pastikan Anda telah menginstal alat repo dan bootstrap Bazel:

    sudo apt install repo bazel-bootstrap
    
  2. Lakukan 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 -j16
    
  3. Bangun aplikasi UEFI:

    tools/bazel run //bootable/libbootloader:gbl_efi_dist
    

Menguji GBL di Perangkat Virtual Android

  1. Menjalankan GBL dalam Cuttlefish:

    cvd start --android_efi_loader=path_to_the_UEFI_app ...
    

    Command cvd start ini 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.