في الأجهزة غير A/B، يجب أن تحتوي صورة الاسترداد على معلومات من صورة تراكب شجرة الجهاز الثنائية الكبيرة (DTB) أو صورة تراكب واجهة التكوين والطاقة المتقدمة (ACPI) . عند تشغيل هذه الأجهزة في الاسترداد، يمكن لبرنامج تحميل التشغيل بعد ذلك تحميل صورة التراكب المتوافقة مع صورة الاسترداد. يجب على الأجهزة التي تدعم تحديثات A/B (السلسة) استخدام الاسترداد كتمهيد بدلاً من قسم استرداد منفصل (لمزيد من التفاصيل، راجع تنفيذ تحديثات A/B ).
تختلف خيارات تضمين استرداد DTBO/ACPIO كجزء من صورة التمهيد/الاسترداد بين إصدارات Android.
يطلق | تحديث المخطط | الامتثال لـ GKI | إصدار رأس التمهيد (أجهزة الإطلاق) | إصدار رأس التمهيد (ترقية الأجهزة) | مطلوب صورة استرداد مخصصة |
---|---|---|---|---|---|
11 | أ/ب، الظاهري أ/ب | نعم | 3 * | لا يوجد | لا |
أ/ب، الظاهري أ/ب | لا | 2، 3 | 0، 1، 2، 3 | لا | |
غير أ/ب | نعم | 3 | لا يوجد | نعم | |
غير أ/ب | لا | 2، 3 | 0، 1، 2، 3 | نعم | |
10 (س) | أ/ب | لا يوجد | 2 | 0، 1، 2 | لا |
غير أ/ب | لا يوجد | 2 | 0، 1، 2 | نعم | |
9 (ف) | أ/ب | لا يوجد | 1 | 0، 1 | لا |
غير أ/ب | لا يوجد | 1 | 0، 1 | نعم | |
8 (س) | أ/ب | لا يوجد | غير متاح (يعتبر 0) | غير متاح (يعتبر 0) | لا |
غير أ/ب | لا يوجد | غير متاح (يعتبر 0) | غير متاح (يعتبر 0) | نعم |
* يجب على أجهزة A/B التي تعمل بنظام التشغيل Android 11 أو أعلى وتستخدم صورة Kernel العامة (GKI) استخدام إصدار رأس التمهيد الأساسي رقم 3 لتكون متوافقة مع قسم تمهيد البائع .
النقاط الرئيسية:
لا تحتاج أجهزة A/B إلى تحديد صورة استرداد حيث تستخدم تحديثات A/B مجموعتين من الأقسام (بما في ذلك
boot
وdtbo
) والتبديل بينهما أثناء التحديثات، مما يزيل الحاجة إلى صورة استرداد. إذا رغبت في ذلك، لا يزال بإمكان أجهزة A/B استخدام صورة استرداد مخصصة.يجب على الأجهزة غير A/B التي يتم تشغيلها بنظام Android 11 أو أعلى وتستخدم إصدار رأس التمهيد 3 أن تحدد بوضوح إصدار رأس التمهيد 2 لصورة الاسترداد بشكل منفصل. على سبيل المثال:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
بالنسبة للبنيات التي لا تدعم أشجار الأجهزة، يمكن أن تتضمن صورة الاسترداد صورة ACPIO بدلاً من صورة DTBO.
حول فشل OTA وصور الاسترداد
لمنع حدوث أعطال عبر الهواء (OTA) على الأجهزة غير A/B، يجب أن تكون صورة الاسترداد مكتفية ذاتيًا ومستقلة عن الصور الأخرى. أثناء التحديث عبر الهواء، إذا حدثت مشكلة بعد تحديث صورة التراكب (ولكن قبل إكمال التحديث الكامل)، فسيحاول الجهاز التمهيد في وضع الاسترداد لإكمال التحديث عبر الهواء. ومع ذلك، نظرًا لأن قسم التراكب قد تم تحديثه بالفعل، فقد يحدث عدم تطابق مع صورة الاسترداد (التي لم يتم تحديثها بعد).
لمنع الاسترداد من الاعتماد على قسم DTBO/ACPIO أثناء التحديث، يمكن للأجهزة غير A/B التي تعمل بنظام Android 9 أو أعلى تحديد صورة استرداد DTBO/ACPIO تحتوي على معلومات من صورة التراكب كقسم منفصل في تنسيق صورة التمهيد ( يجب استخدام إصدار رأس التمهيد 1 أو 2).
تغييرات صورة التمهيد
للسماح لصورة الاسترداد باحتواء الاسترداد DTBO أو ACPIO على الأجهزة غير A/B التي تعمل بنظام Android 9 أو أعلى، قم بتحديث بنية صورة التمهيد كما يلي.
قسم صورة التمهيد | عدد الصفحات |
---|---|
رأس التمهيد (صفحة واحدة) | 1 |
النواة (صفحات لتر) | ل = ( kernel_size + page_size - 1) / page_size |
رامديسك (م صفحة) | م = ( ramdisk_size + page_size - 1) / page_size |
أداة تحميل التشغيل للمرحلة الثانية (عدد الصفحات) | ن = ( second_size + page_size - 1) / page_size |
استرداد DTBO أو ACPIO (صفحات) | 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 التي تعمل بنظام Android 9 أو أعلى استخدام صورة تراكب 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
.