تنفيذ اختبار A/B الافتراضي - التعديلات

عليك اختيار التصحيحات التالية لمعالجة المشكلات المعروفة التالية.

التحقّق من المساحة القابلة للتخصيص بشكل صحيح عند التثبيت من مصدر غير معروف

التثبيت من مصدر غير معروف لحزمة OTA كاملة على جهاز A/B افتراضي يحتوي على ميزات قد يتعذّر تنفيذ قسم بحجم أصغر من *2 * sum(حجم مجموعات التحديث)* مع ما يلي في سجلّ الاسترداد /tmp/recovery.log:

The maximum size of all groups with suffix _b (...) has exceeded half of allocatable space for dynamic partitions ...

فيما يلي مثال على السجل:

[INFO:dynamic_partition_control_android.cc(1020)] Will overwrite existing partitions. Slot A may be unbootable until update finishes!
[...]
[ERROR:dynamic_partition_control_android.cc(803)] The maximum size of all groups with suffix _b (2147483648) has exceeded half of allocatable space for dynamic partitions 1073741824.

إذا واجهت هذه المشكلة، اختَر الإصدار CL 1399393 وأعِد إنشاء ملف التمهيد أو ملف الاسترداد وفلاشه إذا لم يستخدم الجهاز ملف الاسترداد لبدء التشغيل.

إصلاح خطأ في التقسيم أثناء الدمج

بعد تطبيق تحديث عبر الهواء، أثناء عملية دمج VAB، تؤدي المكالمة إلى update_engine_client --cancel إلى تعطُّل CleanupPreviousUpdateAction. هناك أيضًا خطأ محتمَل في المؤشر التلقائي عندما يأتي markSlotSuccessful متأخرًا.

تم حلّ هذه المشكلة من خلال إضافة الدالة StopActionInternal. يلغي CleanupPreviousUpdateAction المهام المعلّقة عند الحذف. ويحافظ على متتغيّر يتتبّع معرّف المهمة للمهمة المعلّقة في حلقة الرسائل. مشغَّلة تدميرها، يتم إلغاء المهمة المعلَّقة لتجنُّب حدوث خطأ seg المباشرة.

تأكَّد من إدخال التغييرات التالية في العرض التدرّجي للمصادر في نظام التشغيل Android 11 لإصلاح SIGSEGV. الأعطال في update_engine أثناء عملية الدمج:

  • CL 1439792 (أ متطلب أساسي لـ CL 1439372)
  • CL 1439372 (CleanupPreviousUpdateAction: cancel pending tasks on destroy)
  • CL 1663460 (إصلاح خطأ المؤشر العشوائي المحتمل عند تأخُّر markSlotSuccessful)

منع الدمج المبكر لـ update_engine

عند تشغيل جهاز (Android 11 والإصدارات الأحدث) واكتمال عملية بدء التشغيل، يتصل update_engine بـ ScheduleWaitMarkBootSuccessful()، WaitForMergeOrSchedule() يؤدي ذلك إلى بدء عملية الدمج. إلا أنّ الجهاز وتتم إعادة تشغيله في الفتحة القديمة. يتعذّر على الجهاز تنفيذ عملية الدمج ويصبح غير قابل للتشغيل.

أضِف التغييرات التالية إلى العرض التدرّجي للمصادر. يُرجى العلم أنّ رمز CL 1664859 اختياري.

  • CL 1439792 (شرط أساسي لـ CL 1439372)
  • CL 1439372 (CleanupPreviousUpdateAction: إلغاء المهام المعلَّقة عند التدمير)
  • CL 1663460 (إصلاح خطأ محتمل في مؤشر الماوس عندما يتأخر markSlotSuccessful)
  • CL 1664859 (اختياري - إضافة unittest بدلاً من CleanupPreviousUpdateAction)

التأكّد من ضبط إعدادات dm-verity الصحيحة

في الإصدار 11 من نظام التشغيل Android والإصدارات الأحدث، يمكن ضبط الأجهزة عن غير قصد باستخدام خيارات dm-verity التالية:

  • CONFIG_DM_VERITY_AVB=y في النواة (النواة)
  • برنامج الإقلاع الذي تم إعداده لاستخدام أي وضع من أوضاع الحقيقة، (مثل AVB_HASHTREE_ERROR_MODE_RESTART_AND_INVALIDATE)، بدون AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO

في حال ضبط إعدادات الجهاز هذه، يؤدي أي خطأ في عملية التحقّق إلى تعطُّل ملف vbmeta، ما يجعل الأجهزة غير المزوّدة بميزة A/B غير قابلة للتشغيل. وبالمثل، إذا تم دمج قد تعمل، قد تتوقف أجهزة A/B عن العمل أيضًا. استخدِم وضع التحقّق AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO فقط.

  1. قم بتعيين CONFIG_DM_VERITY_AVB=n في النواة (النواة).
  2. ضبط الأجهزة لاستخدام وضع AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO بدلاً من ذلك.

لمزيد من المعلومات، يُرجى الاطّلاع على مستندات الإثبات: التعامل مع dm-verity. الأخطاء.

التأكُّد من ضبط الملف المدمج بشكلٍ صحيح

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

تعديل المكوّنات اللازمة

اعتبارًا من نظام التشغيل Android 13، تم نقل snapuserd من ذاكرة الوصول العشوائي للمورِّد إلى النطاق العام. رمكس. في حال ترقية جهازك إلى الإصدار 13 من Android، من المحتمل أن يتأثّر يحتوي ملف ramdisk للمورّد وقرص RAM العام على نسخة من snapuserd. في هذه الحالة، تتطلّب ميزة "الاختبار الافتراضي للإصدارات التجريبية" نسخة النظام من snapuserd. للتأكد من أن تتوفّر النسخة الصحيحة من snapuserd، ويجب تطبيق CL 2031243 (انسخ snapuserd إلى first_stage_ramdisk).