وفّر نظام Android 9 حقل إصدار في صورة التشغيل لتمكين التحديثات على العنوان مع الحفاظ على التوافق مع الأنظمة القديمة. يجب أن يتحقّق برنامج الإقلاع من حقل إصدار العنوان ويحلّل العنوان. وفقًا لذلك. الأجهزة التي تعمل بالإصدارات التالية من Android:
- يمكن أن يستخدم نظام Android 13 الإصدار 3 أو 4 من رأس التشغيل. بالنسبة
الأجهزة التي تتوافق مع صورة Kernel العامة
(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 من رأس التشغيل.
- يستخدم الإصدار Android 8 والإصدارات الأقدم الإصدار 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 ولا تحتاج إلى
صورة الاسترداد. الأجهزة غير المزوّدة بتجربة أ/ب التي تستخدم 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 من رأس الصفحة، والذي يمكن استخدامه للتحقق من سلامة الكيرنل (النواة)
رمكس. يتم إجراء الفحص في VtsSecurityAvbTest ويُشترط إجراؤه على الأجهزة التي تستخدم بنية GKI. ومع ذلك،
لا يشارك تطبيق boot_signature
في عملية التشغيل المتحقَّق منه الخاصة بالجهاز.
ولا تُستخدم إلا في VTS. راجِع إعدادات ملف boot.img لنظام GKI
اللوحات
وإعدادات التشغيل المُتحقّق منه في GKI
لمعرفة التفاصيل.
صورة التشغيل للمورّد رأس الصفحة يدعم الإصدار 4 أجزاء متعددة من ذاكرة الوصول العشوائي للمورّدين.
يستخدم الإصدار 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_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];
};