بازراه‌اندازی نرم (<= AOSP 14)

‫Android 11 از بازراه‌اندازی‌های نرم پشتیبانی می‌کند، که بازراه‌اندازی‌های زمان اجرای فرایندها در فضای کاربر است که برای اعمال به‌روزرسانی‌هایی که نیاز به بازراه‌اندازی دارند استفاده می‌شود (برای مثال، به‌روزرسانی‌های بسته‌های APEX). درحال‌حاضر، بازراه‌اندازی نرم محدود به فرایندهایی است که پس‌از نصب userdata شروع شده‌اند.

بازراه‌اندازی نرم به روش‌های زیر درخواست می‌شود:

  • از PowerManager، با تماس گرفتن با PowerManager.reboot(PowerManager.REBOOT_USERSPACE)

  • از پوسته، بااستفاده از 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 یا از پوسته)، 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 ازبین می‌روند. برای اجازه دادن به بازیابی کلید، هنگام نصب کلید در حلقه‌کلید سیستم فایل، 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 درستی‌سنجی کنید.