عمليات إعادة التشغيل السريعة (<= 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 الذي يعيد ضبط جميع ملفّات ملفّات system التي قد تؤثّر في إعادة التشغيل البسيطة. المواقع المتأثرة:

    • 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.