אנדרואיד 9 הציגה שדה גרסה בכותרת תמונת האתחול, המאפשרת עדכונים לכותרת תוך שמירה על תאימות לאחור. על טוען האתחול לבדוק את שדה גרסת הכותרת ולנתח את הכותרת בהתאם. מכשירים המופעלים עם:
- Android 13 יכול להשתמש בכותרת האתחול בגרסה 3 או 4. עבור מכשירים התומכים בארכיטקטורת Generic Kernel Image (GKI) , גרסה 4 היא תמונת האתחול הראשית והשדה
os_version
בכותרת האתחול חייב להיות אפס. מטעין האתחול של המכשיר צפוי לקבל את פרטי הגרסה ממאפייני Android Verified Boot (AVB) במקום זאת. - אנדרואיד 12 יכולה להשתמש בכותרת האתחול בגרסה 3 או 4. עבור מכשירים התומכים בארכיטקטורת ה- Generic Kernel Image (GKI) , גרסה 4 היא תמונת האתחול הראשית.
- אנדרואיד 11 יכול להשתמש בגרסת כותרת האתחול 3. עבור מכשירים התומכים בארכיטקטורת Generic Kernel Image (GKI) , יש להשתמש בגרסה זו עבור תמונת האתחול הראשית.
- אנדרואיד 10 חייב להשתמש בכותרת האתחול בגרסה 2.
- אנדרואיד 9 חייב להשתמש בגרסה 1 של כותרת האתחול.
- אנדרואיד 8 ומטה נחשבים כמשתמשים בכותרת של תמונת אתחול בגרסה 0.
עבור כל המכשירים הפועלים עם אנדרואיד 9 ומעלה, ה- Vendor Test Suite (VTS) בודק את הפורמט של תמונת boot/recovery
כדי לוודא שכותרת תמונת האתחול משתמשת בגרסה הנכונה. לצפייה בפרטי AOSP על כל כותרות תמונת האתחול והאתחול הנתמכות כעת של הספק, עיין ב- system/tools/mkbootimg/include/bootimg/bootimg.h
.
הטמעת גירסאות כותרת של תמונת אתחול
הכלי mkbootimg
מקבל את הטיעונים הבאים.
טַעֲנָה | תיאור |
---|---|
header_version | מגדיר את גרסת הכותרת של תמונת האתחול. תמונת אתחול עם גרסת כותרת:
|
recovery_dtbo | משמש לארכיטקטורות המשתמשות ב-DTB. מציין את הנתיב לתמונת DTBO לשחזור. אופציונלי עבור מכשירי A/B, שאינם זקוקים לתמונת שחזור. התקנים שאינם A/B המשתמשים header_version :
|
recovery_acpio | משמש לארכיטקטורות המשתמשות ב-ACPI במקום DTB. מציין את הנתיב לתמונת ACPIO לשחזור. אופציונלי עבור מכשירי A/B, שאינם זקוקים לתמונת שחזור. התקנים שאינם A/B המשתמשים header_version :
|
dtb | נתיב לתמונת DTB הכלולה בתמונות האתחול/השחזור. |
dtb_offset | כאשר מתווספים לארגומנט base , מספק את כתובת הטעינה הפיזית עבור עץ ההתקן הסופי. לדוגמה, אם ארגומנט base הוא 0x10000000 והארגומנט dtb_offset הוא 0x01000000 , השדה dtb_addr_field בכותרת תמונת האתחול מאוכלס כ 0x11000000 . |
המכשיר BoardConfig.mk
משתמש בתצורה BOARD_MKBOOTIMG_ARGS
כדי להוסיף header version
לארגומנטים הספציפיים האחרים ללוח של mkbootimg
. לדוגמה:
BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
מערכת ה-build של Android משתמשת במשתנה BoardConfig
BOARD_PREBUILT_DTBOIMAGE
כדי להגדיר את הארגומנט recovery_dtbo
של הכלי mkbootimg
במהלך יצירת תמונת השחזור. לפרטים על השינויים ב-Android Open Source Project (AOSP), סקור את רשימות השינויים המשויכות לגירסאות של כותרות האתחול .
כותרת תמונת אתחול, גרסה 4
אנדרואיד 12 מספק boot_signature
בכותרת תמונת האתחול בגרסה 4, שניתן להשתמש בה כדי לבדוק את תקינות הליבה וה-ramdisk. הבדיקה מתבצעת ב- VtsSecurityAvbTest ונדרשת עבור מכשירים המשתמשים בארכיטקטורת GKI. עם זאת, ה- boot_signature
אינו מעורב בתהליך האתחול המאומת הספציפי למכשיר והוא משמש רק ב-VTS. ראה תצורת לוח GKI boot.img והגדרות אתחול מאומתות של GKI לפרטים.
גרסה 4 של כותרת תמונת האתחול של ספק תומכת במספר רב של שברי ramdisk של ספקים.
גרסה 4 של גרסת הכותרת של תמונת האתחול משתמשת בפורמט הבא.
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 */
};
כותרת תמונת אתחול, גרסה 3
אנדרואיד 11 מעדכנת את כותרת תמונת האתחול לגרסה 3, אשר מסירה את הנתונים הבאים:
טוען אתחול שלב שני. השדות
second_size
ו-second_addr
אינם מופיעים עוד בכותרת של תמונת האתחול. מכשירים עם טוען אתחול שלב שני חייבים לאחסן את טוען האתחול במחיצה משלו.תמונת שחזור. הדרישה לציון תמונת שחזור הוצאה משימוש, והשדות
recovery_dtbo_size
,recovery_dtbo_offset
,recovery_acpio_size
ו-recovery_acpio_offset
אינם מופיעים עוד בכותרת של תמונת האתחול.התקני A/B משתמשים בסכימת עדכון ושחזור שמייתרת לציון תמונת DTBO או ACPIO לשחזור.
התקנים שאינם A/B שרוצים לציין תמונת שחזור (או DTBO או ACPIO) צריכים להשתמש בכותרת של תמונת אתחול בגרסה 1 או 2.
כתם עץ התקן (DTB). ה-DTB מאוחסן במחיצת האתחול של הספק , כך שהשדות
dtb_size
ו-dtb_addr
אינם מופיעים עוד בכותרת תמונת האתחול (אלא נמצאים בכותרת תמונת האתחול של הספק).
התקנים יכולים להשתמש בכותרת של תמונת האתחול בגרסה 3 כדי להתאים לארכיטקטורת Generic Kernel Image (GKI) , המאחדת את ליבת הליבה ומעבירה את מודולי הספק הנדרשים לאתחול למחיצת vendor_boot
(כלומר תמונת האתחול מכילה רק רכיבי GKI). מכשירים ש:
השתמש ב-GKI (דורש ליבת אנדרואיד-4.19 או אנדרואיד-5.4) אך אל תשתמש בעדכוני A/B יכול לציין תמונת שחזור באמצעות תמונת אתחול גרסה 3 עבור תמונת האתחול ותמונת אתחול גרסה 2 עבור תמונת השחזור.
אל תשתמש ב-GKI ואל תשתמש בעדכוני A/B יכולים לציין תמונת שחזור על ידי שימוש בתמונת אתחול גרסה 1 או 2 עבור תמונות האתחול והשחזור.
גרסה 3 של גרסת הכותרת של תמונת האתחול משתמשת בפורמט הבא.
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];
};
כותרת תמונת אתחול, גרסה 2
אנדרואיד 10 מעדכנת את כותרת תמונת האתחול לגרסה 2, אשר מוסיפה קטע למידע על תמונת DTB לשחזור (גודל תמונה וכתובת טעינה פיזית).
גרסה 2 של גרסת הכותרת של תמונת האתחול משתמשת בפורמט הבא.
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 */
};
כותרת תמונת אתחול, גרסה 1
אנדרואיד 9 ממירה את השדה unused
של כותרת תמונת האתחול לשדה גרסת כותרת. מכשירים המופעלים עם אנדרואיד 9 חייבים להשתמש בכותרת תמונת האתחול כאשר גרסת הכותרת מוגדרת ל-1 ומעלה (זה מאומת על ידי VTS).
גרסה 1 של גרסת הכותרת של תמונת האתחול משתמשת בפורמט הבא.
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 יכולים לציין תמונת שכבת-על DTB/ACPI לשחזור כדי לסייע בהפחתת כשלי עדכון דרך האוויר (OTA). (להתקני A/B אין בעיה זו ואינם צריכים לציין תמונת שכבת-על.) ניתן לציין תמונת DTBO או תמונת ACPIO, אך לא את שניהם (מכיוון שהם משמשים על ידי ארכיטקטורות שונות). כדי להגדיר את כותרת תמונת האתחול בצורה נכונה, בעת שימוש:
תמונת DTBO לשחזור, כלול את השדות
recovery_dtbo_size
ו-recovery_dtbo_offset
(ואל תכלול את השדותrecovery_acpio_size
ו-recovery_acpio_offset
).תמונת ACPIO לשחזור, כלול את השדות
recovery_acpio_size
ו-recovery_acpio_offset
(ולא תכלול את השדותrecovery_dtbo_size
ו-recovery_dtbo_offset
).
השדה header_size
מכיל את גודל הכותרת של תמונת האתחול. אם גרסת הכותרת של תמונת האתחול מוגדרת ל-1, שדה id
מכיל את תקציר SHA-1 עבור הקטע recovery_[dtbo|acpio]
של תמונת האתחול בנוסף ל- kernel
, ramdisk
ו- second sections
. לפרטים על שדות recovery_[dtbo|acpio]_size
ו- recovery_[dtbo|acpio]_offset
, ראה תמונות שחזור .
כותרת תמונת אתחול מדור קודם, גרסה 0
מכשירים שהושקו לפני אנדרואיד 9 באמצעות כותרת תמונת האתחול מדור קודם נחשבים כמשתמשים בכותרת תמונת אתחול בגרסה 0.
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];
};