הפעלה מחדש רכה

אנדרואיד 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 מבצעת את השלבים הבאים:

  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 Mount.
    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 מתקין מחדש את המפתחות במחזיק המפתחות של מערכת הקבצים.

חזרה לאתחול קשיח

כדי להבטיח שהפעלה מחדש רכה לא תשאיר מכשיר במצב לא שמיש, אנדרואיד 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 .