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