عمليات إعادة التشغيل السريعة (<= AOSP 14)

يتيح نظام التشغيل Android 11 عمليات إعادة التشغيل الناعمة، وهي تتمثّل في إعادة تشغيل العمليات في مساحة المستخدم أثناء التشغيل لتطبيق التحديثات التي تتطلّب إعادة التشغيل (على سبيل المثال، تحديثات حِزم APEX). في الوقت الحالي، تقتصر عملية الصعق الكهربي بدون إعادة تشغيل على العمليات التي بدأت بعد تركيب userdata.

يُطلب إعادة التشغيل السهلة بالطرق التالية:

  • من PowerManager، من خلال الاتصال بالرقم PowerManager.reboot(PowerManager.REBOOT_USERSPACE)

  • من shell، باستخدام adb shell svc power reboot userspace أو adb reboot userspace

بعد إعادة التشغيل البسيطة، يظل التخزين المشفَّر لبيانات الاعتماد غير مقفل.

إذا كان الجهاز متوافقًا مع عمليات إعادة التشغيل السريعة، ستعرض طريقة واجهة برمجة التطبيقات PowerManager.isRebootingUserspace() القيمة true، وتساوي قيمة خاصية النظام init.userspace_reboot.is_supported 1.

إذا كان الجهاز لا يتيح إعادة التشغيل البسيطة، ستتعذّر المكالمات إلى PowerManager.reboot(PowerManager.REBOOT_USERSPACE) وadb reboot userspace وadb shell svc power reboot userspace.

تنفيذ إعادة التشغيل السريعة

بعد طلب إعادة التشغيل البسيط (من خلال PowerManager أو من بيئة سطر الأوامر)، يؤديinit الخطوات التالية:

  1. تتلقّى sys.powerctl=reboot,userspace.

  2. تؤدي هذه العملية إلى إنشاء عملية UserspaceRebootWatchdogThread() منفصلة لمراقبة عملية إعادة التشغيل الناعمة.

  3. يؤدي ذلك إلى بدء إجراء userspace-reboot-requested الذي يعيد ضبط جميع ملفّات برمجية النظام التي قد تؤثّر في إعادة التشغيل الناعمة. المواقع المتأثرة:

    • sys.usb.config
    • sys.usb.state
    • sys.boot_completed
    • dev.bootcomplete
    • sys.init.updatable_crashing
    • sys.init.updatable_crashing_process_name
    • apexd.status
    • sys.user.0.ce_available
    • sys.shutdown.requested
    • service.bootanim.exit

    يجب ضبط الخصائص المذكورة أعلاه مرة أخرى أثناء تسلسل التمهيد. يمكنك إعادة ضبط المواقع الإضافية إذا لزم الأمر. للاطّلاع على أمثلة، يمكنك الرجوع إلى الإجراء on userspace-reboot-requested في rootdir/init.rc.

  4. يُشغِّل الدالة DoUserspaceReboot التي تُنفِّذ الإجراءات التالية:

    1. تُرسِل SIGTERM إلى العمليات التي تم بدءها بعد تركيب userdata وي تنتظر توقُّفها.
    2. بعد انتهاء المهلة، يتم إرسال SIGKILL لإيقاف أي عمليات تتم تنفيذها.
    3. يتصل بـ /system/bin/vdc volume reset.
    4. إلغاء تركيب جهاز دعم zRAM
    5. تؤدي هذه العملية إلى إلغاء تركيب حِزم APEX النشطة.
    6. التبديل مرة أخرى إلى مساحة الاسم الخاصة بنقطة تثبيت التمهيد
    7. يبدأ الإجراء userspace-reboot-resume.

إذا تم طلب إنشاء نقطة تفتيش لنظام الملفات قبل إعادة التشغيل الناعمة، تتم إعادة تركيب ملف "userdata" في وضع إنشاء نقطة تفتيش أثناء تنفيذ الإجراء "userspace-reboot-fs-remount" (اطّلِع على القسم التالي للاطّلاع على التفاصيل). يتم إجراء عملية إعادة تشغيل بسيطة بعد ضبط sys.boot_completed property على 1. في نهاية إعادة التشغيل الناعمة، تبقى الشاشة مطفأة ويلزم تفاعل المستخدم الواضح لإيقاظها.

فحص نظام الملفات

إذا تم طلب نقطة فحص لنظام الملفات قبل إعادة التشغيل الناعمة، تتم إعادة تركيب ملف "userdata" في وضع فحص النقاط أثناء إعادة التشغيل الناعمة. يتم تنفيذ منطق إعادة الربط في الدالة fs_mgr_remount_userdata_into_checkpointing ، ويختلف بين طرق وضع نقاط التفتيش. على وجه التحديد، في حال كان userdata متوافقًا مع:

  • نقاط التفتيش على مستوى نظام الملفات (على سبيل المثال، f2fs)، تتم قراءة userdata مجددًا باستخدام الخيار checkpoint=disable.

  • نقاط فحص مستوى الحظر (مثلاً، ext4)، يتم بعدها إلغاء تثبيت /data وتدمير كل الأجهزة الرئيسية للأجهزة التي تم تثبيتها فوقها. بعد ذلك، يتم تثبيت userdata باستخدام مسار الرمز نفسه المستخدَم في عملية التمهيد العادية التي تتضمّن نقاط فحص.

في حال استخدام سلسلة مفاتيح على مستوى نظام الملفات لإدارة مفاتيح التشفير من جهة العميل (CE) و التشفير من جهة الجهاز (DE)، يتم فقدان المفاتيح بعد إلغاء تركيب userdata. للسماح بترميم المفتاح، عند تثبيت مفتاح في سلسلة مفاتيح نظام الملفات، تثبِّت vold أيضًا المفتاح نفسه من النوع fscrypt-provisioning في ملف سلسلة المفاتيح على مستوى الجلسة. عند استدعاء init_user0، يعيد vold تثبيت المفاتيح في ملف سلسلة مفاتيح النظام.

استخدام إعادة التشغيل القسري كحل بديل

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

  • تعذُّر على الجهاز بدء إعادة التشغيل البسيطة (أي sys.init.userspace_reboot.in_progress=1) خلال مهلة زمنية معيّنة
  • تعذُّر إيقاف عملية خلال مهلة زمنية معيّنة
  • تعذّر إتمام عملية /system/bin/vdc volume reset.
  • تعذَّر إلغاء تثبيت جهاز zRAM.
  • يتم إلغاء تثبيت حزمة APEX نشطة بشكل غير صحيح.
  • تعذّرت محاولة إعادة تثبيت "userdata" في وضع "نقطة التحقّق".
  • تعذُّر تشغيل جهاز بنجاح (أي sys.boot_completed=1) خلال مهلة معيّنة

الإعدادات لكل جهاز

يمكن ضبط بعض جوانب إعادة التشغيل البسيطة من خلال تغيير قيم الخصائص التالية:

  • تتحكّم هذه السياسة في الحالات التي يمكن فيها للجهاز تنفيذ إعادة تشغيل بسيطة.init.userspace_reboot.is_supported إذا كانت قيمة هذه السمة هي false أو 0 أو لم يتم تحديدها، سيتم رفض محاولات إعادة التشغيل.
  • يتحكّم init.userspace_reboot.sigkill.timeoutmillis في مهلة الانتظار بالمليثواني للعمليات التي تلقّت إشارة SIGKILL للتوقف. إذا تعذّر إيقاف إحدى العمليات خلال مهلة محدّدة، يتم تفعيل الإجراء الاحتياطي لإعادة التشغيل العميق.
  • تتحكّم init.userspace_reboot.sigterm.timeoutmillis في مهلة الانتظار بالمليثواني للعمليات التي تلقّت إشارة SIGTERM لإنهائها. تتلقّى كل العمليات التي تعذّر إنهاؤها خلال مهلة الانتظار المحدّدة إشارة SIGKILL.
  • يتحكّم init.userspace_reboot.started.timeoutmillis في مهلة إعادة التشغيل السريع بالمللي ثانية (أي sys.init.userspace_reboot.in_progress=1). إذا تعذّر على الجهاز بدء إعادة التشغيل السريع خلال المهلة المحدّدة، يتم الرجوع إلى إعادة التشغيل القسري.
  • يتحكّم init.userspace_reboot.userdata_remount.timeoutmillis في المهلة بالمللي ثانية لإلغاء تثبيت userdata. إذا تعذَّر إلغاء تثبيت userdata خلال المهلة المحدَّدة، سيتم إجراء احتياطي لإعادة تشغيل الجهاز.
  • يتحكّم الخيار init.userspace_reboot.watchdog.timeoutmillis في مهلة بدء تشغيل الجهاز بنجاح (أي sys.boot_completed=1). إذا تعذّر على الجهاز بدء التشغيل خلال المهلة المحدّدة، يتم بدء عملية إعادة التشغيل التلقائية.

تخصيص الصورة المتحركة أثناء إعادة التشغيل البسيط

يشمل التنفيذ المرجعي لعملية إعادة التشغيل البسيطة القدرة على تخصيص الرسوم المتحركة التي تظهر أثناء إعادة التشغيل الخفيفة.

في نهاية الإجراء userspace-reboot-fs-remount، يبدأ init خدمة bootanim. تبحث هذه الخدمة عن توفّرملفّات الanimation التالية بالترتيب المدرَج، وتعرض أول ملف تعثر عليه:

  • /product/media/userspace-reboot.zip
  • /oem/media/userspace-reboot.zip
  • /system/media/userspace-reboot.zip
التالي:

إذا لم يتم تحديد أي ملفات صور متحركة معيّنة لعملية إعادة التشغيل السريعة، يعرض bootanim صورة متحركة تلقائية من نوع android.

الاختبار

يتضمّن نظام التشغيل Android 11 عملية تنفيذ مرجعية لإعادة التشغيل الناعمة. بالإضافة إلى ذلك، يمكنك التحقّق من عملية إعادة التشغيل البسيطة باستخدام اختبارات CTS في UserspaceRebootHostTest.