כדי להטמיע את העדכונים האוויריים (OTA), תוכנת האתחול צריכה לקבל גישה לדיסק RAM לשחזור במהלך האתחול. אם המכשיר משתמש בתמונת שחזור AOSP ללא שינוי, תוכנת האתחול קוראת את 32 הבייטים הראשונים במחיצה misc
. אם הנתונים תואמים ל-boot-recovery
, תוכנת האתחול נכנסת לתמונה recovery
. השיטה הזו מאפשרת להמשיך את כל פעולות השחזור בהמתנה (למשל, החלת עדכון OTA או הסרת נתונים) עד להשלמתן.
פרטים על התוכן של בלוק ב-Flash שמשמש לתקשורת של התהליך לשחזור (recovery) ושל מנהל האתחול מופיעים בקובץ bootable/recovery/bootloader_message/bootloader_message.h.
מכשירים עם עדכוני A/B
כדי לתמוך בעדכוני OTA במכשירים שמשתמשים בעדכוני A/B, צריך לוודא שה-bootloader של המכשיר עומד בקריטריונים הבאים.
קריטריונים כלליים
בזמן ההפעלה של המערכת הראשית (ולא מתבצע עדכון לצורך שחזור), יש לעדכן את כל המחיצות שמתעדכנות באמצעות OTA.
כדי לאתחל את המחיצה
system
, מנהל האתחול מעביר את הערך הבא בשורת הפקודה של הליבה:ro root=/dev/[node] rootwait init=/init
.ה-framework של Android אחראי לקרוא ל-
markBootSuccessful
מ-HAL. תוכנת האתחול אף פעם לא אמורה לסמן מחיצה כהפעלה מוצלחת.
תמיכה ב-HAL לבקרת אתחול
מנהל האתחול חייב לתמוך ב-HAL של boot_control
כפי שמוגדר ב-hardware/libhardware/include/hardware/boot_control.h
. העדכן שולח שאילתה ל-boot control HAL, מעדכן את חריץ האתחול שלא בשימוש, משנה את החריץ הפעיל באמצעות ה-HAL ומפעיל מחדש את מערכת ההפעלה המעודכנת. פרטים נוספים זמינים במאמר הטמעת HAL לבקרת אתחול.
תמיכה במשבצות
תוכנת האתחול צריכה לתמוך בפונקציונליות שקשורה למחיצות וליחידות קיבולת (Slot), כולל:
שמות המחיצות חייבים לכלול סיומת שמזהה את המחיצות ששייכות למק"ט מסוים ב-bootloader. לכל חלוקה כזו, יש משתנה תואם
has-slot:partition base name
עם הערךyes
. השמות של המשבצות מסודרים לפי סדר האלף-בית, בתור a, b, c וכו', בהתאם למחיצות עם הסיומת_a
,_b
,_c
וכו'. תוכנת האתחול צריכה להודיע למערכת ההפעלה איזו יחידת קיבולת הופעלה באמצעות מאפיין שורת הפקודהandroidboot.slot_suffix
. המאפיין הזה מוגדר דרך bootconfig במכשירים שמריצים Android מגרסה 12 ואילך.הערך של
slot-retry-count
מתאפס לערך חיובי (בדרך כלל3
), על ידי HAL לבקרת האתחול דרך הקריאה החוזרת (callback)setActiveBootSlot
או דרך הפקודהfastboot set_active
. כשמשנים מחיצה שנכללת בחריץ, תוכנת האתחול מנקה את הסטטוס 'הפעלה מוצלחת' ומאפסת את מספר הניסיונות החוזרים בחריץ.
תוכנת האתחול גם אמורה לקבוע איזה חריץ צריך לטעון. באיור מוצגת דוגמה לתהליך קבלת החלטות.
קובעים באיזה חריץ לנסות. אין לנסות לטעון חריץ שמסומן ב-
slot-unbootable
. החריץ הזה צריך להיות עקבי עם הערכים שמוחזרים על ידי fastboot, והוא נקרא 'החריץ הנוכחי'.אם השקע הנוכחי לא מסומן כ-
slot-successful
ויש בוslot-retry-count = 0
, מסמנים את השקע הנוכחי כ-slot-unbootable
. לאחר מכן בוחרים יחידת קיבולת אחרת שלא מסומנת ב-unbootable
ומסומנת ב-slot-successful
. יחידת הקיבולת הזו תהיה עכשיו היחידה שנבחרה. אם אין חריץ זמין, צריך להפעיל את המכשיר במצב שחזור או להציג למשתמש הודעת שגיאה משמעותית.בוחרים את
boot.img
המתאים ומצרפים את הנתיב למחיצה הנכונה של המערכת בשורת הפקודה של הליבה.מאכלסים את הפרמטר
slot_suffix
של שורת הפקודה בליבה (kernel).מפעילים את המחשב. אם הערך לא מסומן בתור
slot-successful
, צריך להנמיך את הערךslot-retry-count
.
הכלי fastboot
קובע איזה מחיצה יהיה צריך לבצע בה את הפעולה 'אחזור (flash)' כשמריצים פקודות אחזור. לדוגמה, כשמריצים את הפקודה fastboot flash system system.img
, קודם שולחים שאילתה למשתנה current-slot
ואז מקשרים את התוצאה למערכת כדי ליצור את השם של המחיצה שצריך לבצע לה איפוס (system_a
, system_b
וכו').
כשמגדירים את החריץ הנוכחי באמצעות הפקודה set_active
של fastboot או הפקודה setActiveBootSlot
של HAL לבקרת אתחול, מנהל האתחול אמור לעדכן את החריץ הנוכחי, למחוק את slot-unbootable
ואת slot-successful
ולאפס את מספר הניסיונות החוזרים (זו הדרך היחידה למחוק את slot-unbootable
).
מכשירים ללא עדכוני A/B
כדי לתמוך בעדכוני OTA במכשירים שלא משתמשים בעדכוני A/B (ראו מכשירים שלא ניתן לעדכן באמצעות A/B), צריך לוודא שה-bootloader של המכשיר עומד בקריטריונים הבאים.
המחיצה
recovery
צריכה להכיל קובץ אימג' שיכול לקרוא קובץ אימג' של מערכת ממחיצה נתמכת כלשהי (cache
, userdata
) ולכתוב אותו במחיצהsystem
.תוכנת האתחול אמורה לתמוך בהפעלה ישירה למצב שחזור.
אם יש תמיכה בעדכוני קובצי אימג' של הרדיו, אפשר גם להשתמש במחיצה
recovery
כדי להפעיל את הרדיו. אפשר לעשות זאת באחת משתי הדרכים הבאות:תוכנת האתחול מאתחלת את הרדיו. במקרה כזה, אמורה להיות אפשרות להפעיל מחדש את המכשיר ממחיצה לשחזור חזרה לתוכנת האתחול כדי להשלים את העדכון.
קובץ האימג' לשחזור מפעיל את הרדיו. אפשר לספק את הפונקציונליות הזו בתור ספרייה בינארית או כלי שימושי.