Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る
このページは Cloud Translation API によって翻訳されました。
Switch to English

ベンダーブートパーティション

Android 11では、Generic Kernel Image(GKI)の概念が導入されています。 GKIを使用して任意のデバイスを簡単に起動できるようにするために、すべてのベンダー固有の情報がブートパーティションから除外され、新しいベンダーのブートパーティションに再配置されます。 5.4Linuxカーネル上のAndroid11で起動するARM64デバイスは、GKIでのテストに合格するために、ベンダーのブートパーティションと更新されたブートパーティション形式をサポートする必要があります。

パーティション構造

ベンダーのブートパーティションは仮想A / BでA / Bされ、Android検証済みブートによって保護されます。パーティションは、ヘッダー、ベンダーのRAMディスク、およびデバイスツリーブロブ(DTB)で構成されます。

セクションページ数
ベンダーブートヘッダー(nページ) n = (2108 + page_size - 1) / page_size
ベンダーのRAMディスク(oページ) o = (vendor_ramdisk_size + page_size - 1) / page_size
DTB(pページ) p = (dtb_size + page_size - 1) / page_size

ベンダーのRAMディスクとカーネルモジュールの処理の詳細については、カーネルモジュールのサポートを参照してください。

ベンダーブートヘッダー

ベンダーのブートパーティションヘッダーの内容は、主にブートイメージヘッダーからそこに再配置されたデータで構成されています。また、ベンダーのRAMディスクに関する情報も含まれています。

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 */

};

ブートローダーのサポート

ベンダーのブートパーティションには、以前はブートパーティションに存在していた情報(フラッシュページサイズ、カーネル、RAMディスクロードアドレス、DTB自体など)が含まれているため、ブートローダーは、ブートを完了するのに十分なデータを取得するために、ブートパーティションとベンダーブートパーティションの両方にアクセスする必要があります。 。

ブートローダーは、ベンダーのramdiskの直後に汎用ramdiskをメモリロードする必要があります(CPIO、Gzip、およびlz4形式はこのタイプの連結をサポートします)。一般的なRAMディスクイメージのページを揃えたり、メモリ内のベンダーのRAMディスクの最後との間に他のスペースを導入したりしないでください。カーネルが解凍した後、連結されたファイルをinitramfsに抽出します。これにより、ベンダーのramdiskファイル構造にオーバーレイされた汎用ramdiskであるファイル構造が生成されます。

汎用RAMディスクとベンダーRAMディスクは連結されるため、同じ形式である必要があります。 GKIブートイメージはlz4で圧縮された汎用RAMディスクを使用するため、GKIに準拠しているデバイスは、lz4で圧縮されたベンダーのRAMディスクを使用する必要があります。この構成を以下に示します。

ビルドサポート

デバイスのベンダーブートサポートを実装するには:

  • BOARD_BOOT_HEADER_VERSION3設定します。

  • デバイスがGKIに準拠している場合、またはlz4で圧縮された汎用RAMディスクを使用している場合は、 BOARD_RAMDISK_USE_LZ4true設定しtrue

  • ベンダーのRAMディスクに配置する必要のあるカーネルモジュールを考慮して、 BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZEをデバイスに適したサイズに設定します。

  • AB_OTA_PARTITIONSを更新して、 vendor_bootおよびデバイス上のOTAパーティションのベンダー固有のリストを含めます。

  • デバイスのfstabを、 bootパーティションではなくvendor_bootパーティションの/first_stage_ramdiskにコピーします。たとえば、 $(LOCAL_PATH)/fstab.hardware:$(TARGET_COPY_OUT_VENDOR_RAMDISK)/first_stage_ramdisk/fstab.$(PRODUCT_PLATFORM)です。