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