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

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

يتم طلب إعادة التشغيل البرمجية بالطرق التالية:

  • من PowerManager، من خلال الاتصال على PowerManager.reboot(PowerManager.REBOOT_USERSPACE)

  • من واجهة الأوامر، باستخدام 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 أو من shell)، تنفِّذ 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 وتتم إزالة جميع أجهزة &quot;أداة ربط الأجهزة&quot; الرئيسية التي تم تحميلها فوقها. بعد ذلك، يتم تحميل userdata باستخدام مسار الرمز نفسه المستخدَم في عملية إعادة التشغيل العادية.

في حال استخدام سلسلة مفاتيح على مستوى نظام الملفات لإدارة المفاتيح المشفرة ببيانات الاعتماد (CE) والمفاتيح المشفرة بالجهاز (DE)، سيتم فقدان المفاتيح بعد إلغاء تحميل userdata. للسماح باستعادة المفتاح، عند تثبيت مفتاح في سلسلة مفاتيح نظام الملفات، يتم أيضًا تثبيت المفتاح نفسه من النوع fscrypt-provisioning في سلسلة مفاتيح على مستوى الجلسة.vold عند استدعاء 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. تبحث هذه الخدمة عن ملفات الرسوم المتحركة التالية، بالترتيب المذكور، وتشغّل أول ملف تجده:

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

في حال عدم تحديد ملفات رسوم متحركة خاصة بإعادة التشغيل السريعة، تعرض السمة bootanim رسومًا متحركة android تلقائية.

الاختبار

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