אנדרואיד 11 תומך באתחול רך, שהן הפעלה מחדש בזמן ריצה של תהליכים במרחב המשתמש המשמשים להחלת עדכונים הדורשים אתחול מחדש (לדוגמה, עדכונים לחבילות APEX). נכון לעכשיו, הפעלה מחדש רכה מוגבלת לתהליכים שהחלו לאחר הטעינה userdata
.
הפעלה מחדש רכה מתבקשת בדרכים הבאות:
מ-
PowerManager
, על ידי קריאהPowerManager.reboot(PowerManager.REBOOT_USERSPACE)
מתוך shell, באמצעות
adb shell svc power reboot userspace
אוadb reboot userspace
לאחר הפעלה מחדש רכה, אחסון מוצפן של אישורים נשאר פתוח.
אם התקן תומך בהפעלה מחדש רכה, שיטת ה-API 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
, המאפסת את כל מאפייני המערכת שעלולים להשפיע על ההפעלה מחדש הרכה. נכסים מושפעים:-
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 פעילות.
- עובר חזרה למרחב השמות של ה-bootstrap Mount.
- מפעיל את פעולת
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
מתקין מחדש את המפתחות במחזיק המפתחות של מערכת הקבצים.
חזרה לאתחול קשיח
כדי להבטיח שהפעלה מחדש רכה לא תשאיר מכשיר במצב לא שמיש, אנדרואיד 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
המוגדרת כברירת מחדל.
בדיקה
אנדרואיד 11 כולל יישום ייחוס של הפעלה מחדש רכה. בנוסף, אתה יכול לאמת הפעלה מחדש רכה באמצעות מבחני CTS ב- UserspaceRebootHostTest
.