Android 9, önyükleme resmi başlığında bir sürüm alanı sundu. Bu alan, geriye dönük uyumluluğu korurken başlıkta güncelleme yapılmasına olanak tanır. Bootloader, başlık sürümü alanını kontrol etmeli ve başlığı ayrıştırmalıdır buna göre hazırlar. Aşağıdakilerle birlikte kullanıma sunulan cihazlar:
- Android 13, önyükleme başlığı 3 veya 4 sürümünü kullanabilir. Örneğin,
Genel Çekirdek Görüntüyü destekleyen cihazlar
(GKI)
kullanıyorsanız sürüm 4 birincil başlatma görüntüsüdür ve
os_version
alanı sıfır olmalıdır. Cihaz bootloader'ının şunu yapması bekleniyor: Android Doğrulanmış Başlatma'dan (AVB) sürüm bilgilerini alma mülklerini inceleyin. - Android 12, başlatma başlığı sürüm 3 veya 4'ü kullanabilir. Örneğin, Genel Çekirdek Görüntüyü destekleyen cihazlar (GKI) mimarisi için, sürüm 4 birincil önyükleme görüntüsüdür.
- Android 11, önyükleme başlığı 3 sürümünü kullanabilir. Örneğin, Genel Kernel Görüntüsünü destekleyen cihazlar (GKI) mimarisi yoksa birincil önyükleme görüntüsü için bu sürüm kullanılmalıdır.
- Android 10'da 2. sürüm önyükleme başlığı kullanılmalıdır.
- Android 9, 1 numaralı önyükleme başlığı sürümünü kullanmalıdır.
- Android 8 ve önceki sürümlerde 0 sürüm numaralı bir önyükleme resmi üstbilgisi kullanıldığı kabul edilir.
Android 9 veya sonraki sürümlerin yüklü olduğu tüm cihazlarda
Tedarikçi Firma Test Paketi (VTS),
boot/recovery
görüntüsü ile başlatma görüntüsü başlığının doğru
sürümünü değil. Desteklenen tüm önyükleme ve tedarikçi önyükleme resmi üstbilgileriyle ilgili AOSP ayrıntılarını görüntülemek için system/tools/mkbootimg/include/bootimg/bootimg.h
adresine bakın.
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 |
Önyükleme resmi üstbilgi sürümünü ayarlar. Başlık sürümü içeren bir önyükleme resmi:
|
recovery_dtbo |
DTB kullanan mimariler için kullanılır. Kurtarma DTBO resminin yolunu belirtir. Kurtarma resmi gerektirmeyen 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. Yolu belirtir
kurtarma ACPIO görüntüsüne
ekleyin.
kurtarma görüntüsü header_version kullanan A/B olmayan cihazlar:
|
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, nihai cihaz ağacının fiziksel yükleme adresini sağlar. Ö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ı, mkbootimg
'ın kart özelindeki diğer 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 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. Android Open Source Project (AOSP) değişiklikleri hakkında ayrıntılı bilgi için önyükleme resmi üstbilgi sürümlendirmesi ile ilişkili değişiklik listelerini inceleyin.
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. Ayrıntılar için GKI boot.img kart yapılandırması ve GKI doğrulanmış başlatma ayarları başlıklı makalelere bakın.
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.
Başlatma 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 resmi başlığı, 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
vesecond_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
verecovery_acpio_offset
alanları artık önyükleme resmi başlığında görünmüyor.A/B cihazlar, güncelleme ve kurtarma şeması kullanır. Bu şema, kurtarma için DTBO veya ACPIO resmi belirtmeyi gereksiz kılar.
Kurtarma resmi (DTBO veya ACPIO) belirtmek isteyen A/B dışı cihazlar, önyükleme resmi başlığı 1 veya 2 sürümünü kullanmalıdır.
Cihaz ağacı blob'u (DTB). DTB, tedarikçi firma başlatma işleminde depolanır bölüm, Dolayısıyla
dtb_size
vedtb_addr
alanları artık başlatma görüntüsünde görünmez (ancak tedarikçi başlatma görüntüsü başlığında bulunur).
Cihazlar, çekirdek çekirdeği birleştiren ve önyükleme için gereken tedarikçi modüllerini vendor_boot
bölümüne taşıyan Genel Çekirdek Görüntüsü (GKI) mimarisine uymak için önyükleme resmi üstbilgisi 3. sürümünü kullanabilir (yani önyükleme resmi yalnızca GKI bileşenlerini içerir). Aşağıdaki durumlarda olan cihazlar:
GKI'yı kullan (android-4.19 veya android-5.4 çekirdeği gerektirir) ancak A/B güncellemeleri, görüntüsü için önyükleme görüntüsü ve başlatma görüntüsü sürümü 2'dir.
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.
Önyükleme resmi başlığı 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ü başlığı, sürüm 1
Android 9, önyükleme resmi başlığının unused
alanını bir başlık sürümü alanına dönüştürür. Android 9 ile kullanıma sunulan cihazlar, başlık sürümü 1 veya daha yüksek olacak şekilde önyükleme resmi başlığını kullanmalı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.) DTBO resmi veya ACPIO resmi belirtebilirsiniz ancak ikisini birden belirtemezsiniz (çünkü bunlar farklı mimariler tarafından kullanılır). Aşağıdakileri kullanırken önyükleme resmi başlığını doğru şekilde yapılandırmak için:
Kurtarma için bir DTBO görüntüsü.
recovery_dtbo_size
verecovery_dtbo_offset
alanları (recovery_acpio_size
verecovery_acpio_offset
alanları) doldurur.Kurtarma için bir ACPIO görüntüsü.
recovery_acpio_size
verecovery_acpio_offset
alanları (recovery_dtbo_size
verecovery_dtbo_offset
alanları) doldurur.
header_size
alanı, önyükleme resmi 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
. recovery_[dtbo|acpio]_size
ve recovery_[dtbo|acpio]_offset
alanları hakkında ayrıntılı bilgi için Kurtarma Resimleri başlıklı makaleyi inceleyin.
Eski önyükleme resmi başlığı, 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];
};