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

وفّر نظام 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 تُستخدَم لضبط إصدار عنوان صورة التمهيد. صورة تمهيد تتضمّن إصدارًا للعنوان:
  • يتيح الرقم 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 ولا تحتاج إلى صورة الاسترداد. الأجهزة غير المزوّدة بتجربة أ/ب التي تستخدم 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. راجِع إعدادات ملف 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];
};