Önyükleme Görüntü Başlığı

Android 9, önyükleme görüntüsü başlığında bir sürüm alanı sunarak geriye dönük uyumluluğu korurken üstbilgide güncellemelere olanak tanır. Önyükleyici, başlık sürümü alanını kontrol etmeli ve başlığı buna göre ayrıştırmalıdır. Şununla başlatılan cihazlar:

  • Robot 12 destek cihazları için önyükleme başlık sürüm 3 ya da 4 kullanabilir Genel Çekirdek Resim (GKI) mimarisini, versiyon 4 birincil önyükleme görüntüdür.
  • Android 11 destekleyen cihazlar için önyükleme başlık sürüm 3'ü kullanabilirsiniz Jenerik Çekirdek Görüntü (GKI) mimarisini, bu sürüm birincil önyükleme görüntüsü için kullanılmalıdır.
  • Android 10, önyükleme başlığı sürüm 2'yi kullanmalıdır.
  • Android 9, önyükleme başlığı sürüm 1'i kullanmalıdır.
  • Android 8 ve daha düşük sürümler, bir önyükleme görüntüsü üstbilgisi sürüm 0 kullanıyor olarak kabul edilir.

Android 9 veya üstü ile çalışan tüm cihazlar için, Vendor Testi Suite (VTS) denetler biçimi boot/recovery görüntüsü önyükleme görüntü başlığı doğru sürümü kullanmasını sağlamak için. Tüm anda desteklenen çizme ve satıcı önyükleme görüntü başlıklarını AOSP ayrıntılarını görmek için, bakınız system/tools/mkbootimg/include/bootimg/bootimg.h .

Önyükleme görüntüsü üstbilgisi sürüm oluşturmayı uygulama

mkbootimg aracı aşağıdaki argümanları kabul eder.

Argüman Açıklama
header_version Önyükleme görüntüsü başlık sürümünü ayarlar. Başlık sürümüne sahip bir önyükleme görüntüsü:
  • 1 veya 2, bir kurtarma DTBO görüntüsünü veya bir kurtarma ACPIO görüntüsünü destekler.
  • 3 kurtarma görüntülerini desteklemez.
recovery_dtbo DTB kullanan mimariler için kullanılır. Kurtarma DTBO görüntüsünün yolunu belirtir. Kurtarma görüntüsüne ihtiyaç duymayan A/B cihazları için isteğe bağlıdır. Sigara A / kullanarak B cihazlar header_version :
  • 1 veya 2 Bu yol belirtebilir veya kullanabilir recovery_acpio bir kurtarma ACPIO görüntüye bir yol belirtmek bölüm.
  • 3 bir kurtarma DTBO görüntüsü belirtemez.
recovery_acpio DTB yerine ACPI kullanan mimariler için kullanılır. Kurtarma ACPIO görüntüsünün yolunu belirtir. Kurtarma görüntüsüne ihtiyaç duymayan A/B cihazları için isteğe bağlıdır. Sigara A / kullanarak B cihazlar header_version :
  • 1 veya 2 Bu yol belirtebilir veya kullanabilir recovery_dtbo kurtarma DTBO görüntüye bir yol belirtmek bölüm.
  • 3 bir kurtarma ACPIO görüntüsü belirtemez.
dtb Önyükleme/kurtarma görüntülerine dahil olan DTB görüntüsünün yolu.
dtb_offset Eklendiğinde base argümanı, nihai cihaz ağaç için fiziksel yük adresini sağlar. Örneğin, base argümandır 0x10000000 ve dtb_offset argümandır 0x01000000 , dtb_addr_field önyükleme görüntü başlığında olarak doldurulur 0x11000000 .

Cihaz BoardConfig.mk yapılandırma kullanır BOARD_MKBOOTIMG_ARGS eklemek için header version diğer kurul özgü tartışmaları mkbootimg . Örneğin:

BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)

Android inşa sistemi kullanır BoardConfig değişkeni BOARD_PREBUILT_DTBOIMAGE argüman ayarlamak için recovery_dtbo ait mkbootimg kurtarma görüntüsünün oluşturulması sırasında aracı. Android Açık Kaynak Projesi ayrıntılar (AOSP) değişiklikler için gözden önyükleme görüntü başlığı sürüm için ilgili değişiklik listelerine .

Önyükleme görüntüsü başlığı, sürüm 4

Android 12 sağlamaktadır boot_signature çekirdeği ve ramdisk'in bütünlüğünü kontrol etmek için kullanılabilir önyükleme görüntü başlık sürüm 4, içinde. Check yapılır VtsSecurityAvbTest ve GKI 2.0 mimarisini kullanan cihazlar için gereklidir. Ancak, boot_signature cihaza özgü doğrulanmış önyükleme sürecine dahil değildir ve sadece VTS kullanılır. Bkz GKI 2.0 boot.img entegrasyon detayları için.

Satıcı önyükleme görüntü başlık sürüm 4 destekler birden fazla tedarikçi firma ramdiskin fragmanları.

Önyükleme görüntüsü başlık sürümünün 4. sürümü aşağıdaki biçimi kullanır.

struct boot_img_hdr
{
#define BOOT_MAGIC_SIZE 8
    uint8_t magic[BOOT_MAGIC_SIZE];

    uint32_t kernel_size;    /* size in bytes */
    uint32_t ramdisk_size;   /* size in bytes */

    uint32_t os_version;

    uint32_t header_size;    /* size of boot image header in bytes */
    uint32_t reserved[4];
    uint32_t header_version; /* offset remains constant for version check */

#define BOOT_ARGS_SIZE 512
#define BOOT_EXTRA_ARGS_SIZE 1024
    uint8_t cmdline[BOOT_ARGS_SIZE + BOOT_EXTRA_ARGS_SIZE];

    uint32_t signature_size; /* size in bytes */
};

Önyükleme görüntüsü başlığı, sürüm 3

Android 11, önyükleme görüntüsü üstbilgisini aşağıdaki verileri kaldıran sürüm 3'e günceller:

  • İkinci aşama önyükleyici. second_size ve second_addr alanlar artık önyükleme görüntü başlığında görünür. İkinci aşama önyükleyicisi olan aygıtlar, bu önyükleyiciyi kendi bölümünde depolamalıdır.

  • Kurtarma görüntüsü. Kurtarma görüntüsü belirtmek için gereksinim kullanımdan kaldırıldı ve recovery_dtbo_size , recovery_dtbo_offset , recovery_acpio_size ve recovery_acpio_offset alanlar artık önyükleme görüntü başlığında görünür.

    • A/B cihazları, kurtarma için bir DTBO veya ACPIO görüntüsü belirtmeyi gereksiz kılan bir güncelleme ve kurtarma şeması kullanır.

    • Bir kurtarma görüntüsü (DTBO veya ACPIO) belirtmek isteyen A/B olmayan aygıtlar, önyükleme görüntüsü üstbilgisi sürüm 1 veya 2'yi kullanmalıdır.

  • Cihaz ağacı bloğu (DTB). DTB saklanır satıcı önyükleme bölümü böylece, dtb_size ve dtb_addr alanlar artık önyükleme görüntü başlığında görünür (ancak satıcı önyükleme görüntü başlığında mevcuttur).

Cihazlar uymak önyükleme görüntü başlık sürüm 3 kullanabilirsiniz Jenerik Çekirdek Görüntü (GKI) için önyükleme için gerekli olan modüllerin satıcı çekirdek çekirdek ve hamle birleştiren mimarisi, vendor_boot (sadece GKI bileşenlerini içeren önyükleme görüntü anlamında) bölümü. Cihazlar:

  • GKI kullanın (android-4.19 veya android-5.4 çekirdeği gerektirir) ancak A/B güncellemelerini kullanmayın, önyükleme görüntüsü için önyükleme görüntüsü sürüm 3'ü ve kurtarma görüntüsü için önyükleme görüntüsü sürüm 2'yi kullanarak bir kurtarma görüntüsü belirtebilirsiniz.

  • GKI kullanmayın ve A/B güncellemeleri kullanmayın, hem önyükleme hem de kurtarma görüntüleri için önyükleme görüntüsü sürüm 1 veya 2'yi kullanarak bir kurtarma görüntüsü belirtebilirsiniz.

Önyükleme görüntüsü başlık sürümünün 3. sürümü aşağıdaki biçimi kullanır.

struct boot_img_hdr
{
#define BOOT_MAGIC_SIZE 8
    uint8_t magic[BOOT_MAGIC_SIZE];

    uint32_t kernel_size;    /* size in bytes */
    uint32_t ramdisk_size;   /* size in bytes */

    uint32_t os_version;

    uint32_t header_size;    /* size of boot image header in bytes */
    uint32_t reserved[4];
    uint32_t header_version; /* offset remains constant for version check */

#define BOOT_ARGS_SIZE 512
#define BOOT_EXTRA_ARGS_SIZE 1024
    uint8_t cmdline[BOOT_ARGS_SIZE + BOOT_EXTRA_ARGS_SIZE];
};

Önyükleme görüntüsü başlığı, sürüm 2

Android 10 güncellemeler kurtarma için bir bölüm ekler sürümü 2'ye önyükleme görüntü başlığı, DTB görüntü bilgisi (görüntü boyutu ve fiziksel yük adresi).

Önyükleme görüntüsü başlık sürümünün 2. sürümü aşağıdaki biçimi kullanır.

struct boot_img_hdr
{
    uint8_t magic[BOOT_MAGIC_SIZE];
    uint32_t kernel_size;               /* size in bytes */
    uint32_t kernel_addr;               /* physical load addr */

    uint32_t ramdisk_size;              /* size in bytes */
    uint32_t ramdisk_addr;              /* physical load addr */

    uint32_t second_size;               /* size in bytes */
    uint32_t second_addr;               /* physical load addr */

    uint32_t tags_addr;                 /* physical addr for kernel tags */
    uint32_t page_size;                 /* flash page size we assume */
    uint32_t header_version;
    uint32_t os_version;
    uint8_t name[BOOT_NAME_SIZE];       /* asciiz product name */
    uint8_t cmdline[BOOT_ARGS_SIZE];
    uint32_t id[8];                     /* timestamp / checksum / sha1 / etc */
    uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
    uint32_t recovery_[dtbo|acpio]_size;    /* size of recovery image */
    uint64_t recovery_[dtbo|acpio]_offset;  /* offset in boot image */
    uint32_t header_size;               /* size of boot image header in bytes */
    uint32_t dtb_size;                  /* size of dtb image */
    uint64_t dtb_addr;                  /* physical load address */
};

Önyükleme görüntüsü başlığı, sürüm 1

Android 9 dönüştürür unused bir başlık sürümü alana önyükleme görüntü başlığının alanı. Android 9 ile başlatılan cihazlar, başlık sürümü 1 veya daha yükseğine ayarlanmış olarak önyükleme görüntüsü başlığını kullanmalıdır (bu, VTS tarafından doğrulanır).

Önyükleme görüntüsü başlık sürümünün 1. sürümü aşağıdaki biçimi kullanır.

struct boot_img_hdr
{
    uint8_t magic[BOOT_MAGIC_SIZE];
    uint32_t kernel_size;               /* size in bytes */
    uint32_t kernel_addr;               /* physical load addr */
    uint32_t ramdisk_size;              /* size in bytes */
    uint32_t ramdisk_addr;              /* physical load addr */

    uint32_t second_size;               /* size in bytes */
    uint32_t second_addr;               /* physical load addr */

    uint32_t tags_addr;                 /* physical addr for kernel tags */
    uint32_t page_size;                 /* flash page size we assume */
    uint32_t header_version;
    uint32_t os_version;
    uint8_t name[BOOT_NAME_SIZE];       /* asciiz product name */
    uint8_t cmdline[BOOT_ARGS_SIZE];
    uint32_t id[8];                     /* timestamp / checksum / sha1 / etc */
    uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
    uint32_t recovery_[dtbo|acpio]_size;    /* size of recovery image */
    uint64_t recovery_[dtbo|acpio]_offset;  /* offset in boot image */
    uint32_t header_size;               /* size of boot image header in bytes */
};

Sigara A / B cihazlar belirtebilirsiniz kurtarma için DTB / ACPI bindirme görüntüsüne yardım hafifletmek over-the-air (OTA) güncelleme başarısızlıklarına. (A/B aygıtlarında bu sorun yoktur ve bir bindirme görüntüsü belirtmeleri gerekmez.) Bir DTBO görüntüsü veya bir ACPIO görüntüsü belirtebilirsiniz, ancak ikisini birden belirleyemezsiniz (çünkü farklı mimariler tarafından kullanılırlar). Önyükleme görüntüsü başlığını doğru şekilde yapılandırmak için aşağıdakileri kullanırken:

  • Kurtarma için bir DTBO görüntü içerir recovery_dtbo_size ve recovery_dtbo_offset alanları (ve içermemektedir yapmak recovery_acpio_size ve recovery_acpio_offset alanları).

  • Kurtarma için bir ACPIO görüntü içerir recovery_acpio_size ve recovery_acpio_offset alanları (ve içermemektedir yapmak recovery_dtbo_size ve recovery_dtbo_offset alanları).

header_size alan önyükleme görüntü başlığının boyutunu içerir. Önyükleme görüntü başlık sürümü 1 olarak ayarlanırsa, id alanı SHA-1 için sindirmek içeren recovery_[dtbo|acpio] ek olarak önyükleme görüntü bölümünde kernel , ramdisk ve second sections . İlgili ayrıntılar için recovery_[dtbo|acpio]_size ve recovery_[dtbo|acpio]_offset alanlar, bkz Kurtarma Görüntüleri .

Eski önyükleme görüntüsü üstbilgisi, sürüm 0

Eski önyükleme görüntüsü üstbilgisi kullanılarak Android 9'dan önce başlatılan aygıtlar, önyükleme görüntüsü üstbilgisi sürüm 0'ı kullanıyor olarak kabul edilir.

struct boot_img_hdr
{
    uint8_t magic[BOOT_MAGIC_SIZE];
    uint32_t kernel_size;                /* size in bytes */
    uint32_t kernel_addr;                /* physical load addr */

    uint32_t ramdisk_size;               /* size in bytes */
    uint32_t ramdisk_addr;               /* physical load addr */

    uint32_t second_size;                /* size in bytes */
    uint32_t second_addr;                /* physical load addr */

    uint32_t tags_addr;                  /* physical addr for kernel tags */
    uint32_t page_size;                  /* flash page size we assume */
    uint32_t unused;
    uint32_t os_version;
    uint8_t name[BOOT_NAME_SIZE];        /* asciiz product name */
    uint8_t cmdline[BOOT_ARGS_SIZE];
    uint32_t id[8];                      /* timestamp / checksum / sha1 / etc */
    uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
};