Başlatma görüntüsü başlığı

Android 9, başlatma görüntüsünde bir sürüm alanını kullanıma sundu Böylece, geriye dönük uyumluluğu korurken üstbilginin güncellenmesini sağlayabilirsiniz. Bootloader, başlık sürümü alanını kontrol etmeli ve başlığı ayrıştırmalıdır buna göre hazırlar. Kullanıma sunulacak cihazlar:

Android 9 veya sonraki sürümleri çalıştıran tüm cihazlarda Satıcı Testi Paketi (VTS), başlatma resmi başlığında doğru sürümün kullanılmasını sağlamak için boot/recovery resminin biçimini kontrol eder. Desteklenen tüm başlatma ve satıcı başlatma işlemlerinde AOSP ayrıntılarını görüntülemek için resim üstbilgileri, system/tools/mkbootimg/include/bootimg/bootimg.h.

Başlatma görüntüsü başlıkta sürüm oluşturmayı uygulama

mkbootimg aracı aşağıdaki bağımsız değişkenleri kabul eder.

Bağımsız değişken Açıklama
header_version Başlatma görüntüsü üstbilgi sürümünü ayarlar. Başlık sürümü içeren bir önyükleme resmi:
  • 1 veya 2, bir kurtarma DTBO görüntüsünü veya kurtarma ACPIO görüntüsünü destekler.
  • 3, kurtarma görüntülerini desteklemiyor.
recovery_dtbo DTB kullanan mimariler için kullanılır. Kurtarma yolunu belirtir DTBO resmi. Kurtarma görüntüsü gerektirmeyen A/B cihazları için isteğe bağlıdır. header_version kullanan A/B olmayan cihazlar:
  • 1 veya 2, bu yolu belirtebilir ya da recovery_acpio bölümünü kullanarak bir kurtarma ACPIO görüntüsüne giden yolu belirtin.
  • 3, kurtarma DTBO resmini belirtemez.
recovery_acpio DTB yerine ACPI kullanan mimariler için kullanılır. Yolu belirtir geri yükleme ACPIO görüntüsüne eklenecektir. Kurtarma resmi gerektirmeyen A/B cihazlar için isteğe bağlıdır. header_version kullanan A/B olmayan cihazlar:
  • 1 veya 2, bu yolu belirtebilir ya da recovery_dtbo bölümünü kullanarak kurtarma DTBO görüntüsüne giden yolu belirtin.
  • 3, bir kurtarma ACPIO görüntüsü belirtemez.
dtb Başlatma/kurtarma görüntülerinde bulunan DTB görüntüsünün yolu.
dtb_offset base bağımsız değişkenine eklendiğinde fiziksel yükü sağlar adresine gidin. Örneğin, base bağımsız değişkeni 0x10000000 ve dtb_offset bağımsız değişkeni 0x01000000, başlatma görüntüsündeki dtb_addr_field başlık 0x11000000 olarak doldurulur.

BoardConfig.mk cihazı, BOARD_MKBOOTIMG_ARGS yapılandırmasını kullanıyor header version değerini diğer kurula özel mkbootimg bağımsız değişkenlerine atayın. Örneğin, örnek:

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

Android derleme sistemi BoardConfig değişkenini kullanır BOARD_PREBUILT_DTBOIMAGE öğesini kullanarak recovery_dtbo bağımsız değişkenini mkbootimg aracını kullanarak bir kurtarma görüntüsü oluşturun. Ayrıntılı bilgi için Android Açık Kaynak Projesi (AOSP) değişiklikleri, ilişkili değişiklik listelerini inceleyin başlatma görüntüsü başlığı için sürüm oluşturma hakkında daha fazla bilgi edinin.

Başlatma görüntüsü başlığı, sürüm 4

Android 12, başlatma görüntüsünde bir boot_signature sağlar çekirdeğin bütünlüğünü kontrol etmek ve kontrol etmek için kullanılabilen ramdisk'e dokunun. Kontrolün gerçekleştirildiği yer: VtsSecurityAvbTest ve GKI mimarisini kullanan cihazlar için gereklidir. Ancak boot_signature, cihaza özel doğrulanmış başlatma işleminde yer almaz ve yalnızca VTS'de kullanılır. GKI boot.img panosunu inceleyin yapılandırma ve GKI onaylı başlatma Ayarlar inceleyebilirsiniz.

Tedarikçi firma başlatma görüntüsü başlık sürüm 4 birden çok sağlayıcı ramdisk parçasını destekler.

Önyükleme resmi 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 */
};

Başlatma görüntüsü üstbilgisi, sürüm 3

Android 11, başlatma görüntüsü başlığını sürüm 3'e günceller. Bu işlem aşağıdaki verileri kaldırır:

  • İkinci aşama bootloader. second_size ve second_addr alanları artık önyükleme resmi üstbilgisinde görünmez. İkinci aşamalı bir önyükleyiciye sahip cihazlar, bu önyükleyiciyi kendi bölümlerinde saklamalıdır.

  • Kurtarma görüntüsü. Kurtarma resmi belirtme şartı kullanımdan kaldırıldı ve recovery_dtbo_size, recovery_dtbo_offset, recovery_acpio_size ve recovery_acpio_offset alanları artık önyükleme resmi başlığında görünmüyor.

    • A/B cihazları, şunları gereksiz hale getiren bir güncelleme ve kurtarma şeması kullanır: kurtarma için bir DTBO veya ACPIO görüntüsü belirtin.

    • Kurtarma görüntüsü belirtmek isteyen A/B olmayan cihazlar (DTBO veya ACPIO), başlatma görüntüsü başlık sürüm 1 veya 2'yi kullanmalıdır.

  • Cihaz ağacı blob'u (DTB). DTB, tedarikçi önyükleme bölümünde depolandığından dtb_size ve dtb_addr alanları artık önyükleme resmi üstbilgisinde görünmez (ancak tedarikçi önyükleme resmi üstbilgisinde bulunur).

Cihazlar, Genel Çekirdek Görüntüsü ile uyumlu olmak için başlatma görüntüsü başlığı sürüm 3'ü kullanabilir (GKI) mimarisi, Çekirdek çekirdeği birleştiren ve paket için gereken tedarikçi modülleri vendor_boot bölümü için başlat (bu, başlatma görüntüsünün yalnızca GKI içerdiği anlamına gelir) bileşenler). Şu durumda olan cihazlar:

  • GKI'yi kullanın (android-4.19 veya android-5.4 çekirdeği gerekir) ancak A/B güncellemelerini kullanmayın. Başlatma görüntüsü için 3. sürüm, kurtarma görüntüsü için 2. sürüm başlatma resmini kullanarak kurtarma resmini belirtebilirsiniz.

  • GKI kullanmayın ve A/B güncellemeleri kullanmamak için hem başlatma hem de kurtarma görüntüleri için başlatma görüntüsü sürümü 1 veya 2'dir.

Başlatma 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 resmi başlığı, sürüm 2

Android 10, başlatma görüntüsü başlığını sürüm 2'ye günceller. Kurtarma işlemi için bir bölüm ekleyen DTB resim bilgileri (resim boyutu) ve fiziksel yük adresi) ekleyin.

Başlatma görüntüsü başlık sürümünün 2. sürümünde aşağıdaki biçim kullanılı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 */
};

Başlatma görüntüsü üstbilgisi, sürüm 1

Android 9, başlatmanın unused alanını dönüştürür üstbilgi sürümü alanına yüklemenizi sağlar. Android ile kullanıma sunulan cihazlar 9, üstbilgi ile başlatma görüntüsü başlığını kullanmalıdır sürüm 1 veya daha yeni bir sürüme ayarlanmalıdır (bu, VTS tarafından doğrulanır).

Önyükleme resmi başlığı 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 */
};

A/B olmayan cihazlar, her cihaz için bir DTB/ACPI yer paylaşımlı resim yardımcı olacak kablosuz (OTA) güncelleme hataları. (A/B cihazlarında bu sorun bulunmaz ve bir bindirme görüntüsü belirtmeniz gerekmez.) Bir DTBO görüntüsü veya bir ACPIO görüntüsü vardır, ancak ikisi birden kullanılamaz (çünkü bunlar farklı mimarilerde kullanılmaktadır). Başlatma görüntüsü üstbilgisini doğru şekilde yapılandırmak için:

  • Kurtarma için DTBO resmi. recovery_dtbo_size ve recovery_dtbo_offset alanlarını ekleyin (recovery_acpio_size ve recovery_acpio_offset alanlarını eklemeyin).

  • Kurtarma için bir ACPIO resmi. recovery_acpio_size ve recovery_acpio_offset alanlarını ekleyin (recovery_dtbo_size ve recovery_dtbo_offset alanlarını eklemeyin).

header_size alanı, başlatma görüntüsü başlığının boyutunu içerir. Açılışta resim üstbilgisi sürümü 1 olarak ayarlanırsa id alanı şunun için SHA-1 özetini içerir: açılış görüntüsünün recovery_[dtbo|acpio] bölümünü kernel, ramdisk ve second sections. Ayrıntılı bilgi için recovery_[dtbo|acpio]_size ve recovery_[dtbo|acpio]_offset alanları için bkz. Kurtarma Görüntüleri.

Eski başlatma görüntüsü üstbilgisi, sürüm 0

Android 9'dan önce eski önyükleme resmi başlığını kullanan cihazlar, 0 sürümüne sahip bir önyükleme resmi başlığı 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];
};