يتيح نظام التشغيل 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.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
.يشغّل الدالة
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
.