يتيح نظام التشغيل 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 ينفّذ الخطوات التالية:
تتلقّى
sys.powerctl=reboot,userspace.تتفرّع عملية منفصلة
UserspaceRebootWatchdogThread()لمراقبة إعادة التشغيل البرمجية.يؤدي إلى تشغيل إجراء
userspace-reboot-requested، ما يؤدي إلى إعادة ضبط جميع خصائص النظام التي قد تؤثر في إعادة التشغيل البرمجية. العقارات المتأثرة:sys.usb.configsys.usb.statesys.boot_completeddev.bootcompletesys.init.updatable_crashingsys.init.updatable_crashing_process_nameapexd.statussys.user.0.ce_availablesys.shutdown.requestedservice.bootanim.exit
يجب ضبط الخصائص أعلاه مرة أخرى أثناء تسلسل بدء التشغيل. إذا لزم الأمر، يمكنك إعادة ضبط الخصائص الإضافية. للاطّلاع على أمثلة، راجِع الإجراء
on userspace-reboot-requestedفيrootdir/init.rc.يشغّل الدالة
DoUserspaceRebootالتي تنفِّذ الإجراءات التالية:- يرسل
SIGTERMإلى العمليات التي بدأت بعد تثبيتuserdataوينتظر توقّفها. - بعد انتهاء المهلة، يتم إرسال
SIGKILLلإيقاف أي عمليات قيد التشغيل. - المكالمات
/system/bin/vdc volume reset - يؤدي هذا الأمر إلى إلغاء تثبيت الجهاز الاحتياطي zRAM.
- إلغاء تحميل حِزم APEX النشطة
- يعود إلى مساحة الاسم الأساسية.
- يؤدي إلى تشغيل الإجراء
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.