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

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

  • يمكن لنظام Android 13 استخدام الإصدار 3 أو 4 من رأس التمهيد. بالنسبة الأجهزة التي تتوافق مع صورة Kernel العامة (GKI) البنية الأساسية، الإصدار 4 هو صورة التمهيد الأساسية os_version يجب أن يكون الحقل في رأس التشغيل صفرًا. يُتوقَّع أن يكون برنامج إقلاع الجهاز الحصول على معلومات الإصدار من خلال التشغيل المُتحقّق منه على Android (AVB) المواقع بدلاً من ذلك.
  • يمكن لنظام Android 12 استخدام الإصدار 3 أو 4 من ملف ترميز التمهيد. بالنسبة الأجهزة التي تتوافق مع صورة Kernel العامة (GKI) الإصدار 4 هو صورة التمهيد الأساسية.
  • يمكن أن يستخدم نظام Android 11 الإصدار 3 من رأس التشغيل. بالنسبة الأجهزة التي تتوافق مع صورة Kernel العامة (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 يضبط هذا الإعداد إصدار رأس صورة التشغيل. صورة تمهيد تتضمّن إصدارًا للعنوان:
  • يتيح الرقم 1 أو 2 استخدام صورة DTBO لاسترداد الحساب أو صورة ACPIO للاسترداد.
  • لا يتيح الرقم 3 استخدام صور الاسترداد.
recovery_dtbo يُستخدَم للبنى التي تستخدم DTB. تحدِّد هذه السياسة المسار المؤدي إلى عملية الاسترداد. صورة DTBO اختياري لأجهزة 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 من رأس الصفحة، والذي يمكن استخدامه للتحقق من سلامة الكيرنل (النواة) رمكس. يتم التحقق في VtsSecurityAvbTest وهو مطلوب للأجهزة التي تستخدم بنية GKI. ومع ذلك، لا يشارك boot_signature في عملية التشغيل المُتحقَّق منه الخاصة بالجهاز ولا يتم استخدامه إلا في اختبار سلامة السلسلة من التوصيل. راجِع إعدادات ملف 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 من رأس صورة التشغيل للتوافق مع صورة Kernel العامة. (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 في نظام التشغيل. رأس الصورة إلى حقل إصدار العنوان. الأجهزة التي تعمل بنظام التشغيل Android عند إطلاقها يجب أن يستخدم الرقم 9 رأس صورة التشغيل مع العنوان الإصدار 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];
};