اندروید 9 یک فیلد نسخه را در هدر تصویر راهاندازی معرفی کرد که بهروزرسانیهای هدر را در عین حفظ سازگاری با عقب، فعال میکرد. بوت لودر باید قسمت نسخه هدر را بررسی کرده و هدر را بر اساس آن تجزیه کند. راه اندازی دستگاه هایی با:
- Android 13 میتواند از نسخه 3 یا 4 هدر بوت استفاده کند. برای دستگاههایی که از معماری هسته عمومی (GKI) پشتیبانی میکنند، نسخه 4 تصویر اولیه راهاندازی است و قسمت
os_version
در هدر بوت باید صفر باشد. انتظار می رود بوت لودر دستگاه به جای آن اطلاعات نسخه را از ویژگی های Android Verified Boot (AVB) بدست آورد. - Android 12 میتواند از نسخه 3 یا 4 سرصفحه بوت استفاده کند. برای دستگاههایی که از معماری هسته عمومی (GKI) پشتیبانی میکنند، نسخه 4 تصویر اولیه راهاندازی است.
- Android 11 میتواند از نسخه 3 هدر بوت استفاده کند. برای دستگاههایی که از معماری هسته عمومی (GKI) پشتیبانی میکنند، این نسخه باید برای تصویر راهاندازی اولیه استفاده شود.
- اندروید 10 باید از هدر بوت نسخه 2 استفاده کند.
- اندروید 9 باید از هدر بوت نسخه 1 استفاده کند.
- اندروید 8 و پایین تر به عنوان استفاده از هدر تصویر بوت نسخه 0 در نظر گرفته می شود.
برای همه دستگاههایی که دارای Android 9 یا بالاتر هستند، مجموعه تست فروشنده (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 | برای معماری هایی که به جای DTB از ACPI استفاده می کنند استفاده می شود. مسیر تصویر 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)
سیستم ساخت اندروید از متغیر BoardConfig
BOARD_PREBUILT_DTBOIMAGE
برای تنظیم آرگومان recovery_dtbo
ابزار mkbootimg
در حین ایجاد تصویر بازیابی استفاده می کند. برای جزئیات در مورد تغییرات پروژه منبع باز Android (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) باید از هدر تصویر بوت نسخه ۱ یا ۲ استفاده کنند.
حباب درخت دستگاه (DTB). DTB در پارتیشن راهاندازی فروشنده ذخیره میشود، بنابراین فیلدهای
dtb_size
وdtb_addr
دیگر در هدر تصویر راهاندازی ظاهر نمیشوند (اما در هدر تصویر راهاندازی فروشنده وجود دارند).
دستگاهها میتوانند از هدر تصویر بوت نسخه 3 برای مطابقت با معماری Generic Kernel Image (GKI) استفاده کنند، که هسته اصلی را متحد میکند و ماژولهای فروشنده را که برای بوت مورد نیاز هستند به پارتیشن vendor_boot
منتقل میکند (به این معنی که تصویر بوت فقط شامل اجزای GKI است). دستگاه هایی که:
استفاده از GKI (نیاز به android-4.19 یا android-5.4) اما عدم استفاده از بهروزرسانیهای A/B میتواند تصویر بازیابی را با استفاده از Boot Image نسخه 3 برای تصویر بوت و Boot Image نسخه 2 برای تصویر بازیابی مشخص کند.
از GKI استفاده نکنید و از A/B استفاده نکنید، بهروزرسانیهای A/B میتوانند یک تصویر بازیابی را با استفاده از Boot Image نسخه 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
هدر تصویر بوت را به فیلد نسخه هدر تبدیل می کند. دستگاههایی که با Android 9 راهاندازی میشوند باید از هدر تصویر بوت با نسخه هدر تنظیم شده روی ۱ یا بالاتر استفاده کنند (این توسط 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];
};