أدخل نظام التشغيل Android 9 حقل إصدار في عنوان ملف التمهيد، ما يتيح إجراء تعديلات على العنوان مع الحفاظ على التوافق مع الإصدارات القديمة. يجب أن يتحقّق مشغّل الإقلاع من حقل إصدار العنوان ويحلّل العنوان وفقًا لذلك. الأجهزة التي يتم تشغيلها باستخدام:
- يمكن لنظام Android 13 استخدام الإصدار 3 أو 4 من ملف ترميز التمهيد. بالنسبة إلى
الأجهزة المتوافقة مع بنية Generic Kernel Image
(GKI)
، يكون الإصدار 4 هو صورة التمهيد الأساسية ويجب أن يكون الحقل
os_version
في عنوان التمهيد صفريًا. من المتوقّع أن يحصل برنامج تشغيل الجهاز على معلومات الإصدار من خصائص ميزة "التمهيد التحقق منه" في Android (AVB) بدلاً من ذلك. - يمكن لنظام Android 12 استخدام الإصدار 3 أو 4 من ملف ترميز التمهيد. بالنسبة إلى الأجهزة المتوافقة مع بنية Generic Kernel Image (GKI) ، يكون الإصدار 4 هو صورة الإقلاع الأساسية.
- يمكن لنظام التشغيل Android 11 استخدام الإصدار 3 من عنوان التمهيد. بالنسبة إلى الأجهزة المتوافقة مع بنية Generic Kernel Image (GKI) ، يجب استخدام هذا الإصدار لصورة التمهيد الأساسية.
- يجب أن يستخدم نظام التشغيل Android 10 الإصدار 2 من ملف "رأس التمهيد".
- يجب أن يستخدم نظام التشغيل Android 9 الإصدار 1 من ملف "رأس التمهيد".
- يُعتبَر أنّ الإصدار 8 من نظام التشغيل Android والإصدارات الأقدم منه تستخدم الإصدار 0 من عنوان صورة التمهيد.
بالنسبة إلى جميع الأجهزة التي تعمل بنظام التشغيل Android 9 أو الإصدارات الأحدث، تتحقّق مجموعة اختبارات المورّدين (VTS) من تنسيق ملف boot/recovery
لضمان استخدام الإصدار الصحيح في عنوان صورة التشغيل. للاطّلاع على تفاصيل AOSP حول جميع رؤوس ملف التمهيد وملف التمهيد الخاص بجهة التصنيع
، يُرجى الرجوع إلى
system/tools/mkbootimg/include/bootimg/bootimg.h
.
تنفيذ نظام تحديد الإصدارات في عنوان صورة التشغيل
تقبل أداة mkbootimg
الوسيطات التالية.
الوسيطة | الوصف |
---|---|
header_version |
تُستخدَم لضبط إصدار عنوان صورة التمهيد. صورة تمهيد تتضمّن إصدارًا للعنوان:
|
recovery_dtbo |
يُستخدَم للبنى التي تستخدم DTB. تحدِّد هذه الوسيطة مسار ملف معالجة البيانات اختياري للأجهزة التي تستخدم ميزة 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)
يستخدم نظام إنشاء Android المتغيّر BoardConfig
BOARD_PREBUILT_DTBOIMAGE
لضبط الوسيطة recovery_dtbo
لأداة
mkbootimg
أثناء إنشاء صورة الاسترداد. للاطّلاع على تفاصيل حول
تغييرات "مشروع Android المفتوح المصدر" (AOSP)، راجِع قوائم التغييرات المرتبطة
بإصدارات عنوان ملف التمهيد.
عنوان صورة التشغيل، الإصدار 4
يقدّم نظام التشغيل Android 12 boot_signature
في ملف التمهيد
الإصدار 4 من العنوان، والذي يمكن استخدامه للتحقّق من سلامة النواة وملف
ramdisk. يتم إجراء الفحص في VtsSecurityAvbTest
وهو مطلوب للأجهزة التي تستخدم بنية GKI. ومع ذلك، لا يشارك boot_signature
في عملية التشغيل المُتحقَّق منه الخاصة بالجهاز
ولا يتم استخدامه إلا في اختبار سلامة السلسلة من التوصيل. راجِع إعدادات ملف boot.img لوحدة GKI
وإعدادات التشغيل المُتحقّق منه في GKI
لمعرفة التفاصيل.
يتيح الإصدار 4 من عنوان ملف التمهيد الخاص بالمورّد استخدام أجزاء متعددة من ذاكرة الوصول العشوائي (RAM) الخاصة بالمورّد.
يستخدم الإصدار 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
يُحدِّث نظام التشغيل Android 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 (يتطلب استخدام نواة android-4.19 أو android-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
يُعدّل نظام التشغيل Android 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
يحوّل نظام التشغيل Android 9 حقل unused
لعنوان
صورة الإقلاع إلى حقل إصدار العنوان. يجب أن تستخدم الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android عنوان صورة التمهيد مع ضبط إصدار العنوان على 1 أو إصدار أحدث (يُحقّق من ذلك اختبار سلامة السلسلة).
يستخدم الإصدار 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
إنّ الأجهزة التي تم طرحها قبل Android 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];
};