הטמעת עדכוני OTA

כדי להטמיע את העדכונים האלחוטיים (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.

  • הקריאה ל-markBootSuccessful מ-HAL היא באחריות מסגרת Android. תוכנת האתחול אף פעם לא אמורה לסמן מחיצה כהפעלה מוצלחת.

תמיכה ב-HAL לבקרת אתחול

מנהל האתחול חייב לתמוך ב-HAL של boot_control כפי שמוגדר ב-hardware/libhardware/include/hardware/boot_control.h. העדכן שולח שאילתה ל-boot control HAL, מעדכן את חריץ האתחול שלא בשימוש, משנה את החריץ הפעיל באמצעות ה-HAL ומפעיל מחדש את מערכת ההפעלה המעודכנת. פרטים נוספים זמינים במאמר הטמעת HAL לבקרת אתחול.

תמיכה בחריגות

מנהל האתחול חייב לתמוך בפונקציונליות שקשורה למחיצות ולתאים, כולל:

  • שמות המחיצות חייבים לכלול סיומת שמזהה את המחיצות ששייכות למק"ט מסוים ב-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. כשמשנים מחיצה שנכללת בחריץ, תוכנת האתחול מנקה את הסטטוס 'הפעלה מוצלחת' ומאפסת את מספר הניסיונות החוזרים בחריץ.

תוכנת האתחול צריכה גם לקבוע איזה חריץ לטעון. באיור מוצגת דוגמה לתהליך קבלת החלטות.

תהליך ההקצאה של תוכנת האתחול
איור 1. תהליך הקצאת שטחי פרסום ב-Bootloader
  1. קובעים באיזה חריץ לנסות. אין לנסות לטעון חריץ שמסומן ב-slot-unbootable. החריץ הזה צריך להיות עקבי עם הערכים שמוחזרים על ידי fastboot, והוא נקרא 'החריץ הנוכחי'.

  2. אם השקע הנוכחי לא מסומן כ-slot-successful ויש בו slot-retry-count = 0, מסמנים את השקע הנוכחי כ-slot-unbootable. לאחר מכן בוחרים יחידת קיבולת אחרת שלא מסומנת ב-unbootable ומסומנת ב-slot-successful. יחידת הקיבולת הזו תהיה עכשיו היחידה שנבחרה. אם אין חריץ זמין, צריך להפעיל את המכשיר במצב שחזור או להציג למשתמש הודעת שגיאה משמעותית.

  3. בוחרים את boot.img המתאים ומצרפים את הנתיב למחיצה הנכונה של המערכת בשורת הפקודה של הליבה.

  4. מאכלסים את הפרמטר slot_suffix בשורת הפקודה של הליבה.

  5. מפעילים את המחשב. אם הוא לא מסומן ב-slot-successful, מפחיתים את slot-retry-count.

הכלי fastboot קובע איזו מחיצה יהיה צריך לבצע בה את הפעולה 'פלאש' כשמריצים פקודות פלאש. לדוגמה, כשמריצים את הפקודה 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 כדי להפעיל את הרדיו. אפשר לעשות זאת באחת משתי דרכים:

    • תוכנת האתחול מאתחלת את הרדיו. במקרה כזה, אמורה להיות אפשרות להפעיל מחדש את המכשיר ממחיצה לשחזור חזרה לתוכנת האתחול כדי להשלים את העדכון.

    • קובץ האימג' לשחזור מפעיל את הרדיו. אפשר לספק את הפונקציונליות הזו בתור ספרייה בינארית או כלי שימושי.