على الأجهزة غير 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.