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

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