صور الاسترداد

على الأجهزة غير A/B، يجب أن تحتوي صورة الاسترداد على معلومات من كائن ثنائي كبير (blob) لشجرة الأجهزة (DTB) أو صورة تراكب واجهة الإعدادات المتقدّمة والطاقة (ACPI). عندما يتم تشغيل هذه الأجهزة في وضع الاسترداد، يمكن لمبرنامج الإقلاع تحميل صورة الطبقة المتراكبة المتوافقة مع صورة الاسترداد. يجب أن تستخدم الأجهزة التي تتوافق مع تحديثات النظام (سلسة) من النوع أ/ب وضع الاسترداد كوضع تشغيل بدلاً من قسم استرداد منفصل (للحصول على التفاصيل، يُرجى الاطّلاع على تنفيذ تحديثات النظام من النوع أ/ب).

تختلف خيارات تضمين DTBO/ACPIO للاسترداد كجزء من صورة التشغيل/الاسترداد باختلاف إصدارات Android.

الإصدار تعديل المخطط الامتثال لمعايير GKI إصدار عنوان التشغيل (الأجهزة التي يتم إطلاقها) إصدار عنوان التمهيد (ترقية الأجهزة) يجب توفير صورة استرداد مخصّصة
11 A/B،
اختبار A/B الافتراضي
نعم 3* لا ينطبق لا
A/B،
اختبار A/B الافتراضي
لا 2, 3 0, 1, 2, 3 لا
non-A/B نعم 3 لا ينطبق نعم
non-A/B لا 2, 3 0, 1, 2, 3 نعم
‫10 (Q) A/B لا ينطبق 2 0, 1, 2 لا
non-A/B لا ينطبق 2 0, 1, 2 نعم
‫9 (P) A/B لا ينطبق 1 0, 1 لا
non-A/B لا ينطبق 1 0, 1 نعم
‫8 (O) A/B لا ينطبق غير متوفّر (يتم احتسابه على أنّه 0) غير متوفّر (يتم احتسابه على أنّه 0) لا
non-A/B لا ينطبق غير متوفّر (يتم احتسابه على أنّه 0) غير متوفّر (يتم احتسابه على أنّه 0) نعم

* يجب أن تستخدم أجهزة A/B التي تعمل بالإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث وتستخدِم صورة النواة العامة (GKI) إصدارًا أساسيًا من عنوان التمهيد يبلغ 3 لكي تكون متوافقة مع قسم vendor boot.

النقاط الرئيسية:

  • لا تحتاج الأجهزة التي تستخدم نظام التشغيل A/B إلى تحديد صورة استرداد، لأنّ تحديثات A/B تستخدم مجموعتَين من الأقسام (بما في ذلك boot وdtbo) وتتبادل بينهما أثناء التحديثات، ما يزيل الحاجة إلى صورة استرداد. يمكن لأجهزة A/B أن تستخدم صورة استرداد مخصّصة.

  • يجب أن تحدّد الأجهزة غير A/B التي تعمل بالإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث وتستخدم الإصدار 3 من عنوان التمهيد الإصدار 2 من عنوان التمهيد بشكل صريح لصورة الاسترداد بشكل منفصل. مثلاً:

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • بالنسبة إلى البِنى التي لا تتوافق مع أشجار الأجهزة، يمكن أن تتضمّن صورة الاسترداد صورة ACPIO بدلاً من صورة DTBO.

لمحة عن حالات تعذُّر التحديث عبر شبكة غير سلكية (OTA) وصور الاسترداد

لمنع حدوث أخطاء في التحديث عبر شبكة غير سلكية (OTA) على الأجهزة التي لا تستخدم نظام التشغيل A/B، يجب أن تكون صورة الاسترداد مكتفية ذاتيًا ومستقلة عن الصور الأخرى. أثناء التحديث عبر شبكة غير سلكية (OTA)، إذا حدثت مشكلة بعد تعديل صورة التراكب (ولكن قبل اكتمال التحديث الكامل)، يحاول الجهاز التشغيل في وضع الاسترداد لإكمال التحديث عبر شبكة غير سلكية (OTA). ومع ذلك، بما أنّه تم تعديل قسم التراكب، قد يحدث عدم تطابق مع صورة الاسترداد (التي لم يتم تعديلها بعد).

لمنع الاعتماد على قسم DTBO/ACPIO أثناء التحديث، يمكن للأجهزة التي لا تستخدم بنية A/B وتعمل بالإصدار 9 من نظام Android أو إصدار أحدث تحديد صورة DTBO/ACPIO للاسترداد تحتوي على معلومات من صورة التراكب كقسم منفصل في تنسيق صورة التمهيد (يجب استخدام إصدار 1 أو 2 من عنوان التمهيد).

التغييرات في صورة التشغيل

للسماح لصورة الاسترداد باحتواء DTBO أو ACPIO للاسترداد على الأجهزة التي لا تستخدم بنية A/B وتعمل بالإصدار 9 من نظام التشغيل Android أو إصدار أحدث، عليك تعديل بنية صورة التمهيد على النحو التالي.

قسم "صورة التشغيل" عدد الصفحات
رأس التمهيد (صفحة واحدة) 1
النواة (ل صفحات) l = (kernel_size + page_size - 1) / page_size
Ramdisk (صفحات m) m = (ramdisk_size + page_size - 1) / page_size
برنامج الإقلاع في المرحلة الثانية (عدد الصفحات) n = (second_size + page_size - 1) / page_size
Recovery DTBO أو ACPIO (0 صفحة) o = (recovery_[dtbo|acpio]_size + page_size - 1) / page_size

للحصول على تفاصيل حول وسيطات الأداة mkbootimg لتحديد إصدار عنوان صورة التمهيد ومسارات صورة التراكب، يُرجى الاطّلاع على إصدار عنوان صورة التمهيد.

تنفيذ DTBO

يمكن للأجهزة غير A/B التي تعمل بالإصدار 9 أو إصدار أحدث ملء قسم recovery_dtbo في صورة الاسترداد. لتضمين الصورة recovery_dtbo في recovery.img، اتّبِع الخطوات التالية في جهاز BoardConfig.mk:

  • اضبط الإعداد BOARD_INCLUDE_RECOVERY_DTBO على true:

     BOARD_INCLUDE_RECOVERY_DTBO := true
    
  • وسِّع المتغيّر BOARD_MKBOOTIMG_ARGS لتحديد إصدار عنوان صورة التشغيل:

    BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • تأكَّد من ضبط المتغيّر BOARD_PREBUILT_DTBOIMAGE على مسار صورة DTBO. يستخدم نظام إنشاء Android المتغيّر لضبط وسيطة recovery_dtbo في أداة mkbootimg أثناء إنشاء صورة الاسترداد.

إذا تم ضبط المتغيرات BOARD_INCLUDE_RECOVERY_DTBO وBOARD_MKBOOTIMG_ARGS وBOARD_PREBUILT_DTBOIMAGE بشكل صحيح، سيضمِّن نظام إنشاء Android ملف DTBO الذي يحدّده المتغير BOARD_PREBUILT_DTBOIMAGE في recovery.img.

تنفيذ ACPIO

يمكن للأجهزة غير المتوافقة مع بنية A/B التي تعمل بالإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث استخدام صورة مركّبة ACPIO (بدلاً من صورة DTBO) ويمكنها ملء القسم recovery_acpio (بدلاً من القسم recovery_dtbo) في صورة الاسترداد. لتضمين صورة recovery_acpio في recovery.img، اتّبِع الخطوات التالية على جهاز BoardConfig.mk:

  • اضبط الإعداد BOARD_INCLUDE_RECOVERY_ACPIO على true:

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • وسِّع المتغيّر BOARD_MKBOOTIMG_ARGS لتحديد إصدار عنوان صورة التشغيل. يجب أن تكون قيمة المتغير أكبر من أو تساوي 1 لتفعيل ميزة استرداد ACPIO.

    BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • تأكَّد من ضبط المتغيّر BOARD_RECOVERY_ACPIO على مسار صورة ACPIO. يستخدم نظام الإصدار في Android المتغيّر لضبط وسيطة recovery_acpio في أداة mkbootimg أثناء إنشاء صورة الاسترداد.

إذا تم ضبط المتغيرات BOARD_INCLUDE_RECOVERY_ACPIO وBOARD_MKBOOTIMG_ARGS وBOARD_RECOVERY_ACPIO بشكل صحيح، سيتضمّن نظام الإصدار في Android ACPIO المحدّد بواسطة المتغير BOARD_RECOVERY_ACPIO في recovery.img.