يتيح نظام التشغيل 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
الخطوات التالية:
تتلقّى
sys.powerctl=reboot,userspace
.تؤدي هذه العملية إلى إنشاء عملية
UserspaceRebootWatchdogThread()
منفصلة لمراقبة عملية إعادة التشغيل الناعمة.يؤدي ذلك إلى تشغيل إجراء
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
.يُشغِّل الدالة
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
. للسماح بترميم المفتاح، عند تثبيت مفتاح في سلسلة مفاتيح نظام الملفات، تثبِّت 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
.