إعادة تشغيل لينة

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

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

  • من PowerManager ، عن طريق الاتصال بـ PowerManager.reboot(PowerManager.REBOOT_USERSPACE)

  • من Shell، استخدم adb shell svc power reboot userspace أو adb reboot userspace

بعد إعادة التشغيل البسيطة، يظل التخزين المشفر لبيانات الاعتماد مفتوحًا.

إذا كان الجهاز يدعم عمليات إعادة التشغيل الناعمة، فإن أسلوب PowerManager.isRebootingUserspace() API يُرجع 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. يعود مرة أخرى إلى مساحة اسم تثبيت bootstrap.
    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 . للسماح باستعادة المفاتيح، عند تثبيت مفتاح إلى حلقة مفاتيح نظام الملفات، يقوم 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 . تبحث هذه الخدمة عن وجود ملفات الرسوم المتحركة التالية، بالترتيب المذكور، وتقوم بتشغيل أول ملف تجده:

  • /product/media/userspace-reboot.zip
  • /oem/media/userspace-reboot.zip
  • /system/media/userspace-reboot.zip

إذا لم يتم تحديد ملفات رسوم متحركة محددة لإعادة التشغيل الناعم، فسيعرض bootanim رسمًا متحركًا افتراضيًا android .

اختبارات

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