على الأجهزة غير A/B، يجب أن تحتوي صورة استرداد الإعدادات الأصلية على معلومات من ملف ثنائي كبير (BLOB) لشجرة أجهزة (DTB) أو صورة تراكب واجهة الإعدادات المتقدّمة والطاقة (ACPI). عندما يتم تشغيل هذه الأجهزة في وضع الاسترداد، يمكن لبرنامج إقلاع بعد ذلك تحميل صورة التراكب المتوافقة مع صورة استرداد الإعدادات الأصلية. يجب أن تستخدم الأجهزة التي تتوافق مع تحديثات A/B (بدون توقّف) عملية الاسترداد كعملية تمهيد بدلاً من استخدام قسم استرداد منفصل (للحصول على التفاصيل، يُرجى الاطّلاع على تنفيذ تحديثات A/B).
تختلف خيارات تضمين 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)، إذا حدثت مشكلة بعد تعديل صورة التراكب (ولكن قبل اكتمال التحديث الكامل)، يحاول الجهاز التشغيل في وضع الاسترداد لإكمال التحديث عبر شبكة غير سلكية. ومع ذلك، بما أنّ قسم التراكب قد تم تعديله، قد يحدث عدم تطابق مع صورة استرداد الإعدادات الأصلية (التي لم يتم تعديلها بعد).
لمنع الاعتماد على قسم DTBO/ACPIO أثناء التحديث، يمكن للأجهزة التي لا تستخدم بنية A/B وتعمل بالإصدار 9 من نظام التشغيل Android أو إصدار أحدث تحديد صورة DTBO/ACPIO خاصة بعملية الاسترداد تحتوي على معلومات من صورة التراكب كقسم منفصل في تنسيق صورة التمهيد (يجب استخدام إصدار 1 أو 2 من عنوان التمهيد).
التغييرات في صورة التشغيل
للسماح لصورة استرداد الإعدادات الأصلية باحتواء DTBO أو ACPIO للاسترداد على الأجهزة التي لا تستخدم بنية A/B وتعمل بالإصدار 9 من نظام التشغيل Android أو إصدار أحدث، يجب تعديل بنية صورة التشغيل على النحو التالي.
| قسم صورة التشغيل | عدد الصفحات |
|---|---|
| عنوان التمهيد (صفحة واحدة) | 1 |
| Kernel (الصفحات التي تبدأ بالحرف l) | 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 or ACPIO (o pages) | 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.