Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Partisi Boot Vendor

Android 11 memperkenalkan konsep Generic Kernel Image (GKI). Untuk mengaktifkan dengan mudah mem-boot perangkat arbitrer dengan GKI, semua informasi khusus vendor difaktorkan keluar dari partisi boot dan dipindahkan ke partisi boot vendor baru. Perangkat ARM64 yang diluncurkan dengan Android 11 pada kernel Linux 5.4 harus mendukung partisi boot vendor dan format partisi boot yang diperbarui untuk lulus pengujian dengan GKI.

Struktur partisi

Partisi boot vendor adalah A / B dengan A / B virtual dan dilindungi oleh Android Verified Boot. Partisi terdiri dari header, vendor ramdisk, dan device tree blob (DTB).

Bagian Jumlah halaman
Vendor boot header (n halaman) n = (2108 + page_size - 1) / page_size
Vendor ramdisk (halaman o) o = (vendor_ramdisk_size + page_size - 1) / page_size
DTB (halaman p) p = (dtb_size + page_size - 1) / page_size

Untuk detail tentang vendor ramdisk dan penanganan modul kernel, lihat Dukungan Modul Kernel .

Header boot vendor

Isi header partisi boot vendor terutama terdiri dari data yang telah dipindahkan ke sana dari header image booting . Ini juga berisi informasi tentang ramdisk vendor.

struct vendor_boot_img_hdr
{
#define VENDOR_BOOT_MAGIC_SIZE 8
    uint8_t magic[VENDOR_BOOT_MAGIC_SIZE];
    uint32_t header_version;
    uint32_t page_size;           /* flash page size we assume */

    uint32_t kernel_addr;         /* physical load addr */
    uint32_t ramdisk_addr;        /* physical load addr */

    uint32_t vendor_ramdisk_size; /* size in bytes */

#define VENDOR_BOOT_ARGS_SIZE 2048
    uint8_t cmdline[VENDOR_BOOT_ARGS_SIZE];

    uint32_t tags_addr;           /* physical addr for kernel tags */

#define VENDOR_BOOT_NAME_SIZE 16
    uint8_t name[VENDOR_BOOT_NAME_SIZE]; /* asciiz product name */
    uint32_t header_size;         /* size of vendor boot image header in
                                   * bytes */
    uint32_t dtb_size;            /* size of dtb image */
    uint64_t dtb_addr;            /* physical load address */

};

Dukungan bootloader

Karena partisi boot vendor berisi informasi (seperti ukuran halaman flash, kernel, alamat pemuatan ramdisk, DTB itu sendiri) yang sebelumnya ada di partisi boot, bootloader harus mengakses partisi boot dan vendor boot agar memiliki cukup data untuk menyelesaikan booting. .

Bootloader harus memuat ramdisk generik ke dalam memori segera setelah ramdisk vendor (format CPIO, Gzip, dan lz4 mendukung jenis penggabungan ini). Jangan halaman meratakan gambar ramdisk generik atau memasukkan spasi lain antara itu dan akhir ramdisk vendor di memori. Setelah kernel mendekompresi, ia mengekstrak file yang digabungkan menjadi initramfs , yang menghasilkan struktur file yang merupakan ramdisk generik yang dihamparkan pada struktur file ramdisk vendor.

Karena ramdisk generik dan ramdisk vendor digabungkan, keduanya harus dalam format yang sama. Gambar boot GKI menggunakan ramdisk generik terkompresi lz4, sehingga perangkat yang memenuhi persyaratan GKI harus menggunakan ramdisk vendor terkompresi lz4. Konfigurasi untuk ini ditunjukkan di bawah.

Bangun dukungan

Untuk mengimplementasikan dukungan boot vendor untuk perangkat:

  • Setel BOARD_BOOT_HEADER_VERSION ke 3 .

  • Setel BOARD_RAMDISK_USE_LZ4 ke true jika perangkat Anda sesuai dengan GKI, atau jika perangkat menggunakan ramdisk generik terkompresi lz4.

  • Setel BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE ke ukuran yang sesuai untuk perangkat Anda, dengan mempertimbangkan modul kernel yang harus ada di ramdisk vendor.

  • Perbarui AB_OTA_PARTITIONS untuk menyertakan vendor_boot dan daftar partisi OTA khusus vendor apa pun di perangkat.

  • Salin fstab perangkat Anda ke /first_stage_ramdisk di partisi vendor_boot daripada di partisi boot . Misalnya, $(LOCAL_PATH)/fstab.hardware:$(TARGET_COPY_OUT_VENDOR_RAMDISK)/first_stage_ramdisk/fstab.$(PRODUCT_PLATFORM) .