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 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 Android Verified Boot (AVB), yang memungkinkan GBL 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 data pengguna di super.

  • Konfigurasi OS. Firmware harus dapat mengubah command line kernel, device tree (DTB), dan bootconfig dengan penyesuaian OEM yang diperlukan untuk mem-booting perangkat.

  • Pemuatan VM yang dilindungi. Biner harus memuat firmware VM yang dilindungi dan telah diverifikasi dengan benar sebelum kernel Android jika ada VM yang dilindungi. Untuk mengetahui informasi selengkapnya, lihat Urutan booting Microdroid.

  • Manajemen memori. Firmware booting harus mendukung API alokasi memori UEFI.

Persyaratan penerapan

Agar GBL dapat diterapkan dengan benar di perangkat Anda, Anda harus memenuhi persyaratan berikut:

  • Perangkat Anda harus berisi dua partisi FAT berukuran 8 MB (atau lebih besar) yang diberi nama 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 satuan blok. Contohnya mencakup perangkat UFS, eMMC, dan kartu SD.
    • FAT digunakan karena merupakan sistem file yang ada di mana-mana dan mudah.
    • Sebaiknya pilih sistem file FAT yang sesuai dengan kebutuhan Anda dari FAT12, FAT16, dan FAT32.
    • Kedua partisi diperlukan untuk update over-the-air (OTA) dan rollback selama periode dukungan versi Android ini.
    • GBL berukuran sekitar 2 MB yang tidak terkompresi. 8 MB sudah cukup untuk memperhitungkan pertumbuhan apa pun karena fitur tambahan selama tujuh tahun ke depan.
    • Jika ada update GBL, Anda harus mengupdate seluruh partisi android_esp_${SLOT_SUFFIX}. Update khusus GBL tidak didukung oleh Android OTA.
    • GUID jenis partisi yang digunakan untuk kedua partisi FAT harus sesuai dengan GUID Partisi Sistem EFI C12A7328-F81F-11D2-BA4B-00A0C93EC93B.
  • Versi GBL yang di-deploy harus merupakan build produksi bersertifikasi terbaru dari cabang rilis GBL yang sesuai. Sebaiknya tanda tangani salinan GBL bersertifikasi Google menggunakan solusi penandatanganan pilihan Anda dan simpan metadata build dan tanda tangan yang dihasilkan di dalam partisi android_esp_${SLOT_SUFFIX}.

    • Sertifikat GBL HARUS dibiarkan utuh oleh tanda tangan OEM DAN tidak boleh ada header yang diterapkan ke biner.
    • Build GBL developer digunakan secara ketat untuk tujuan pengembangan dan proses debug. Build tidak dapat dikirim dan tidak akan disertifikasi oleh Google.
  • GBL harus disimpan di jalur /EFI/BOOT/BOOTAA64.EFI dalam partisi FAT.

  • Terapkan protokol UEFI dan Android UEFI yang diperlukan untuk mendukung GBL. Build produksi GBL gagal di-booting jika antarmuka ini tidak didukung.

    • EFI_BLOCK_IO_PROTOCOL atau EFI_BLOCK_IO2_PROTOCOL mengambil image booting dan image pvmfw dari disk
    • EFI_RNG_PROTOCOL untuk canary 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 implementasi no-op, tetapi GBL mencatat log 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 adalah 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 yang telah dibuat sebelumnya untuk dijalankan atau membuat biner sendiri dan menjalankannya.

Mendapatkan dan menjalankan biner GBL

GBL didistribusikan sebagai biner aplikasi UEFI tunggal. Anda dapat mengupdate biner ini secara independen dari firmware dasar perangkat menggunakan mekanisme update standar Android.

Mulai Android 16, jika Anda mengirimkan perangkat berdasarkan chipset ARM-64, sebaiknya deploy versi GBL bersertifikasi Google terbaru dan integrasikan ke dalam rantai booting Anda.

Membangun GBL

Untuk membangun GBL:

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

    sudo apt install repo bazel-bootstrap
    
  2. 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. Jalankan GBL dalam Cuttlefish:

    cvd start --android_efi_loader=path_to_the_UEFI_app ...
    

    Perintah 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 untuk GBL, buka komponen Android Generic Bootloader di Buganizer.

Jika ada pertanyaan, hubungi tim GBL, kirim email ke android-gbl@google.com.