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

قدّم الإصدار 9 من نظام التشغيل Android حقل إصدار في عنوان صورة التمهيد، ما يتيح إجراء تحديثات على العنوان مع الحفاظ على التوافق مع الإصدارات القديمة. يجب أن يتحقّق برنامج التشغيل من حقل إصدار العنوان وأن يحلّل العنوان وفقًا لذلك. الأجهزة التي سيتم إطلاقها مع:

  • يمكن لنظام التشغيل Android 13 استخدام إصدار عنوان التمهيد 3 أو 4. بالنسبة إلى الأجهزة التي تتوافق مع بنية صورة النواة العامة (GKI)، الإصدار 4 هو صورة التمهيد الأساسية ويجب أن يكون الحقل os_version في عنوان التمهيد صفرًا. من المتوقّع أن يحصل برنامج إقلاع الجهاز على معلومات الإصدار من خصائص "التشغيل المتحقّق منه من خلال Android" (AVB) بدلاً من ذلك.
  • يمكن لنظام التشغيل Android 12 استخدام الإصدار 3 أو 4 من عنوان التمهيد. بالنسبة إلى الأجهزة التي تتوافق مع بنية صورة النواة العامة (GKI)، يكون الإصدار 4 هو صورة الإقلاع الأساسية.
  • يمكن استخدام الإصدار 3 من عنوان التمهيد على نظام التشغيل Android 11. بالنسبة إلى الأجهزة التي تتوافق مع بنية صورة النواة العامة (GKI)، يجب استخدام هذا الإصدار لصورة الإقلاع الأساسية.
  • يجب أن يستخدم Android 10 إصدار 2 من عنوان التمهيد.
  • يجب أن يستخدم الإصدار 9 من نظام التشغيل Android الإصدار 1 من عنوان التمهيد.
  • يُعدّ الإصدار 8 من نظام التشغيل Android والإصدارات الأقدم تستخدم الإصدار 0 من عنوان صورة التشغيل.

بالنسبة إلى جميع الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث، تتحقّق مجموعة اختبارات المورّد (VTS) من تنسيق صورة boot/recovery للتأكّد من أنّ عنوان صورة التشغيل يستخدم الإصدار الصحيح. للاطّلاع على تفاصيل AOSP حول جميع عناوين صور التشغيل وعناوين صور التشغيل الخاصة بالمورّد المعتمَدة، يُرجى الرجوع إلى system/tools/mkbootimg/include/bootimg/bootimg.h.

تنفيذ نظام تحديد إصدارات عناوين صور التشغيل

تقبل أداة mkbootimg الوسيطات التالية.

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

يعدّل 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 من عنوان صورة التشغيل.

  • ملف Device Tree Blob (DTB): يتم تخزين DTB في قسم vendor boot، وبالتالي لم يعُد الحقلان dtb_size وdtb_addr يظهران في رأس صورة التشغيل (ولكنّهما يظهران في رأس صورة vendor boot).

يمكن للأجهزة استخدام الإصدار 3 من عنوان صورة التمهيد للامتثال لبنية صورة النواة العامة (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 أو إصدار أحدث (يتم التحقّق من ذلك من خلال مجموعة اختبارات صحة الجهاز (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 من نظام التشغيل Android والتي تستخدم عنوان صورة التمهيد القديم كأنّها تستخدم الإصدار 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];
};