أدخل نظام التشغيل Android 9 حقل إصدار في عنوان ملف التمهيد، ما يتيح إجراء تعديلات على العنوان مع الحفاظ على التوافق مع الإصدارات القديمة. يجب أن يتحقّق برنامج الإقلاع من حقل إصدار العنوان ويحلّل العنوان وفقًا لذلك. الأجهزة التي يتم تشغيلها باستخدام:
- يمكن أن يستخدم نظام Android 13 الإصدار 3 أو 4 من رأس التشغيل. بالنسبة إلى
الأجهزة المتوافقة مع بنية Generic Kernel Image
(GKI)
، يكون الإصدار 4 هو صورة التمهيد الأساسية ويجب أن يكون الحقل
os_version
في عنوان التمهيد صفريًا. من المفترض أن يحصل برنامج تشغيل الجهاز على معلومات الإصدار من خصائص ميزة "التشغيل المُتحقّق منه" (AVB) من Android بدلاً من ذلك. - يمكن لنظام Android 12 استخدام الإصدار 3 أو 4 من ملف ترميز التمهيد. بالنسبة إلى الأجهزة التي تتيح بنية Generic Kernel Image (GKI) ، يكون الإصدار 4 هو صورة الإقلاع الأساسية.
- يمكن لنظام التشغيل Android 11 استخدام الإصدار 3 من عنوان التمهيد. بالنسبة إلى الأجهزة التي تتيح بنية Generic Kernel Image (GKI) ، يجب استخدام هذا الإصدار لصورة التمهيد الأساسية.
- يجب أن يستخدم نظام التشغيل Android 10 الإصدار 2 من ملف "رأس التمهيد".
- يجب أن يستخدم نظام التشغيل Android 9 الإصدار 1 من ملف "رأس التمهيد".
- يستخدم الإصدار Android 8 والإصدارات الأقدم الإصدار 0 من عنوان صورة التشغيل.
بالنسبة إلى جميع الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث، تتحقّق حزمة اختبار المورّدين (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 من العنوان الخاص بصورة التشغيل، والتي يمكن استخدامها للتحقّق من سلامة النواة (النواة) وذاكرة الوصول العشوائي (RAMD). يتم إجراء الفحص في
VtsSecurityAvbTest
وهو مطلوب للأجهزة التي تستخدم بنية GKI. يُرجى العِلم أنّ
boot_signature
لا تدخل في عملية التشغيل المتحقَّق منه الخاصة بالجهاز،
ولا تُستخدم إلا في VTS. لمعرفة التفاصيل، يمكنك الاطّلاع على إعداد لوحة GKI Boot.img وإعدادات التشغيل الذي تم التحقّق منه في GKI.
يتوافق الإصدار 4 من عنوان صورة تشغيل المورّد مع أجزاء متعددة من قرص RAMD للمورّد.
يستخدم الإصدار 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. يمكن أن تحدّد تحديثات 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 image للاسترداد (حجم الصورة وعنوان التحميل الفعلي).
يستخدم الإصدار 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 أو إصدار أحدث (يُحقّق من ذلك اختبار 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
تُعتبر الأجهزة التي تم طرحها قبل 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];
};