عنوان صورة التشغيل

أدخل نظام التشغيل 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 تُستخدَم لضبط إصدار عنوان صورة التمهيد. صورة تمهيد تتضمّن إصدارًا للعنوان:
  • يتيح العدد 1 أو 2 استخدام صورة DTBO أو صورة ACPIO لاسترداد الإعدادات الأصلية.
  • لا تتيح الإصدارات 3 استخدام صور الاسترداد.
recovery_dtbo يُستخدَم للبنى التي تستخدم DTB. تحدِّد هذه الوسيطة مسار ملف معالجة البيانات اختياري للأجهزة التي تستخدم ميزة A/B ولا تحتاج إلى صورة استرداد. الأجهزة غير المزوّدة بميزة A/B التي تستخدم header_version:
  • يمكن للعنصرَين 1 أو 2 تحديد هذا المسار أو استخدام القسم recovery_acpio لتحديد مسار إلى صورة ACPIO للاسترداد.
  • 3 لا يمكن تحديد صورة DTBO للاسترداد.
recovery_acpio تُستخدَم للتصاميم التي تستخدم ACPI بدلاً من DTB. تحدِّد هذه الوسيطة مسار صورة ACPIO الخاصة بالاسترداد. اختياري للأجهزة التي تستخدم ميزة A/B ولا تحتاج إلى صورة الاسترداد. الأجهزة غير المزوّدة بميزة A/B التي تستخدم header_version:
  • يمكن للعنصرَين 1 أو 2 تحديد هذا المسار أو استخدام القسم recovery_dtbo لتحديد مسار إلى صورة DTBO للاسترداد.
  • 3 لا يمكن تحديد صورة ACPIO للاسترداد.
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];
};