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 booting perangkat arbitrer dengan GKI dengan mudah, semua informasi khusus vendor diperhitungkan 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 A/B dengan virtual A/B dan dilindungi oleh Android Verified Boot. Partisi terdiri dari header, ramdisk vendor, dan device tree blob (DTB).

Bagian Jumlah halaman
Header boot vendor (n halaman) n = (2108 + page_size - 1) / page_size
Ramdisk vendor (halaman) o = (vendor_ramdisk_size + page_size - 1) / page_size
DTB (halaman) p = (dtb_size + page_size - 1) / page_size

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

Header boot vendor

Isi header partisi penjual booting terutama terdiri dari data yang telah direlokasi ada dari sundulan boot image . 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 boot vendor agar memiliki data yang cukup untuk menyelesaikan booting .

Bootloader harus memuat ramdisk generik ke dalam memori segera setelah vendor ramdisk (yang cpio, Gzip, dan format LZ4 mendukung jenis Rangkaian). Jangan menyelaraskan halaman gambar ramdisk generik atau memasukkan ruang lain antara itu dan ujung ramdisk vendor di memori. Setelah decompress kernel, itu ekstrak file bersambung menjadi initramfs , yang hasil dalam struktur file yang ramdisk overlay generik pada struktur penjual ramdisk berkas.

Karena ramdisk generik dan ramdisk vendor digabungkan, keduanya harus dalam format yang sama. Gambar boot GKI menggunakan ramdisk generik yang dikompresi lz4, jadi perangkat yang sesuai dengan GKI harus menggunakan ramdisk vendor yang dikompresi lz4. Konfigurasi untuk ini ditunjukkan di bawah ini.

Membangun dukungan

Untuk menerapkan dukungan boot vendor untuk perangkat:

  • Set BOARD_BOOT_HEADER_VERSION ke 3 .

  • Set BOARD_RAMDISK_USE_LZ4 untuk true jika perangkat Anda GKI compliant, atau jika sebaliknya menggunakan ramdisk generik LZ4-terkompresi.

  • Set BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE ke ukuran yang sesuai untuk perangkat Anda, mengingat modul kernel yang harus pergi pada vendor ramdisk.

  • Perbarui AB_OTA_PARTITIONS untuk memasukkan vendor_boot dan setiap daftar khusus vendor partisi OTA pada perangkat.

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