Android 9, önyükleme görüntüsü başlığında bir sürüm alanı sunarak, geriye dönük uyumluluğu korurken başlıkta güncelleme yapılmasını mümkün kıldı. Önyükleyicinin başlık sürümü alanını kontrol etmesi ve başlığı buna göre ayrıştırması gerekir. Şunlarla başlatılan cihazlar:
- Android 13, önyükleme başlığı sürüm 3 veya 4'ü kullanabilir . Genel Çekirdek Görüntüsü (GKI) mimarisini destekleyen cihazlar için sürüm 4, birincil önyükleme görüntüsüdür ve önyükleme başlığındaki
os_version
alanı sıfır olmalıdır. Cihaz önyükleyicisinin sürüm bilgilerini bunun yerine Android Doğrulanmış Önyükleme (AVB) özelliklerinden alması bekleniyor. - Android 12, önyükleme başlığı sürüm 3 veya 4'ü kullanabilir . Genel Çekirdek Görüntüsü (GKI) mimarisini destekleyen cihazlar için sürüm 4, birincil önyükleme görüntüsüdür.
- Android 11, önyükleme başlığı sürüm 3'ü kullanabilir . Genel Çekirdek Görüntüsü (GKI) mimarisini destekleyen cihazlarda, birincil önyükleme görüntüsü için bu sürümün kullanılması gerekir.
- 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 eski sürümlerin, önyükleme görüntüsü üstbilgisi sürüm 0'ı kullandığı kabul edilir.
Android 9 veya üzeri sürümle çalışan tüm cihazlar için Satıcı Test Paketi (VTS), önyükleme görüntüsü başlığının doğru sürümü kullandığından emin olmak için boot/recovery
görüntüsünün biçimini kontrol eder. Şu anda desteklenen tüm önyükleme ve satıcı önyükleme görüntüsü başlıklarındaki AOSP ayrıntılarını görüntülemek için system/tools/mkbootimg/include/bootimg/bootimg.h
bakın.
Önyükleme görüntüsü üstbilgisi sürümünün uygulanması
mkbootimg
aracı aşağıdaki argümanları kabul eder.
Argüman | Tanım |
---|---|
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ü:
|
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. header_version kullanan A/B olmayan cihazlar:
|
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. header_version kullanan A/B olmayan cihazlar:
|
dtb | Önyükleme/kurtarma görüntülerine dahil edilen DTB görüntüsünün yolu. |
dtb_offset | base değişkene eklendiğinde son aygıt ağacı için fiziksel yük adresini sağlar. Örneğin, base değişken 0x10000000 ve dtb_offset bağımsız değişkeni 0x01000000 ise, önyükleme yansıması üstbilgisindeki dtb_addr_field 0x11000000 olarak doldurulur. |
BoardConfig.mk
cihazı, mkbootimg
diğer panele özgü bağımsız değişkenlerine header version
eklemek için BOARD_MKBOOTIMG_ARGS
yapılandırmasını kullanır. Örneğin:
BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Android derleme sistemi, kurtarma görüntüsünün oluşturulması sırasında mkbootimg
aracının recovery_dtbo
bağımsız değişkenini ayarlamak için BoardConfig
BOARD_PREBUILT_DTBOIMAGE
değişkenini kullanır. Android Açık Kaynak Projesi (AOSP) değişiklikleriyle ilgili ayrıntılar için, önyükleme görüntüsü üstbilgisi sürümü oluşturmayla ilgili değişiklik listelerini inceleyin.
Önyükleme görüntüsü başlığı, sürüm 4
Android 12, sürüm 4'teki önyükleme görüntüsü başlığında, çekirdeğin ve ramdiskin bütünlüğünü kontrol etmek için kullanılabilecek bir boot_signature
sağlar. Denetim VtsSecurityAvbTest'te yapılır ve GKI mimarisini kullanan cihazlar için gereklidir. Ancak boot_signature
, cihaza özel doğrulanmış önyükleme işlemine dahil değildir ve yalnızca VTS'de kullanılır. Ayrıntılar için GKI boot.img kartı yapılandırmasına ve GKI onaylı önyükleme ayarlarına bakın.
Satıcı önyükleme görüntüsü üstbilgisi sürüm 4, birden fazla satıcının ramdisk parçasını destekler.
Önyükleme görüntüsü üst bilgisi 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
vesecond_addr
alanları artık önyükleme görüntüsü başlığında görünmüyor. İkinci aşama önyükleyiciye sahip cihazların bu önyükleyiciyi kendi bölümünde saklaması gerekir.Kurtarma görüntüsü. Kurtarma görüntüsü belirtme gereksinimi kullanımdan kaldırıldı ve
recovery_dtbo_size
,recovery_dtbo_offset
,recovery_acpio_size
verecovery_acpio_offset
alanları artık önyükleme görüntüsü başlığında görünmüyor.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ü başlığı sürüm 1 veya 2'yi kullanmalıdır.
Cihaz ağacı bloğu (DTB). DTB, satıcının önyükleme bölümünde depolanır, dolayısıyla
dtb_size
vedtb_addr
alanları artık önyükleme görüntüsü başlığında görünmez (ancak satıcının önyükleme görüntüsü başlığında bulunur).
Cihazlar, çekirdek çekirdeği birleştiren ve önyükleme için gerekli satıcı modüllerini vendor_boot
bölümüne (önyükleme görüntüsünün yalnızca GKI bileşenlerini içerdiği anlamına gelir) taşıyan Genel Çekirdek Görüntüsü (GKI) mimarisine uyum sağlamak için önyükleme görüntüsü üstbilgisi sürüm 3'ü kullanabilir. Şu özelliklere sahip 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üncellemelerini 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ü üst bilgisi 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, önyükleme görüntüsü başlığını sürüm 2'ye günceller ve bu sürüm, kurtarma DTB görüntü bilgileri (görüntü boyutu ve fiziksel yükleme adresi) için bir bölüm ekler.
Önyükleme yansıması üst bilgisi 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, önyükleme görüntüsü başlığının unused
alanını başlık sürümü alanına dönüştürür. Android 9 ile başlatılan cihazların, başlık sürümü 1 veya daha yükseğe ayarlanmış şekilde önyükleme görüntüsü üstbilgisini kullanması gerekir (bu, VTS tarafından doğrulanmıştır).
Önyükleme yansıması üst bilgisi 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, kablosuz (OTA) güncelleme hatalarının azaltılmasına yardımcı olmak amacıyla kurtarma için bir DTB/ACPI yer paylaşımı görüntüsü belirtebilir. (A/B aygıtlarında bu sorun yoktur ve bir kaplama görüntüsü belirtmeniz gerekmez.) Bir DTBO görüntüsü veya bir ACPIO görüntüsü belirtebilirsiniz, ancak ikisini birden belirtemezsiniz (çünkü bunlar farklı mimariler tarafından kullanılır). Aşağıdakileri kullanırken önyükleme görüntüsü başlığını doğru şekilde yapılandırmak için:
Kurtarmaya yönelik bir DTBO görüntüsü,
recovery_dtbo_size
verecovery_dtbo_offset
alanlarını içerir (verecovery_acpio_size
verecovery_acpio_offset
alanlarını içermez).Kurtarma için bir ACPIO görüntüsü,
recovery_acpio_size
verecovery_acpio_offset
alanlarını içerir (verecovery_dtbo_size
verecovery_dtbo_offset
alanlarını içermez).
header_size
alanı, önyükleme görüntüsü başlığının boyutunu içerir. Önyükleme görüntüsü üstbilgi sürümü 1 olarak ayarlanmışsa, id
alanı kernel
, ramdisk
ve second sections
ek olarak önyükleme görüntüsünün recovery_[dtbo|acpio]
bölümü için SHA-1 özetini içerir. recovery_[dtbo|acpio]_size
ve recovery_[dtbo|acpio]_offset
alanlarıyla ilgili ayrıntılar için bkz. Kurtarma Görüntüleri .
Eski önyükleme görüntüsü başlığı, sürüm 0
Eski önyükleme görüntüsü üstbilgisini kullanarak Android 9'dan önce başlatılan cihazların, önyükleme görüntüsü üstbilgisi sürüm 0'ı kullandığı 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];
};