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

وفّر نظام 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 التي لا تحتاج إلى صورة استرداد. الأجهزة غير 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 في عملية التشغيل المتحقَّق منه الخاصة بالجهاز. ولا تُستخدم إلا في VTS. الاطّلاع على لوحة GKI Boot.img الإعدادات والتشغيل المتحقّق منه 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];
};