عمليات إعادة التشغيل السريعة (<= 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 وتتم إزالة جميع أجهزة "أداة ربط الأجهزة" الرئيسية التي تم تثبيتها عليها. بعد ذلك، يتم تحميل 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.