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

כדי להטמיע את העדכונים האלחוטיים (OTA), תוכנת האתחול צריכה להיות מסוגלת לגשת לדיסק RAM של שחזור במהלך האתחול. אם המכשיר משתמש בתמונה לשחזור של AOSP שלא שונתה, תוכנת האתחול קוראת את 32 הבייטים הראשונים במחיצה misc. אם הנתונים שם תואמים ל-boot-recovery, תוכנת האתחול מבצעת אתחול לתמונה recovery. השיטה הזו מאפשרת להמשיך את כל פעולות השחזור שממתינות (לדוגמה, החלת עדכון OTA או הסרת נתונים) עד להשלמתן.

פרטים על התוכן של בלוק ב-flash שמשמש לתקשורת על ידי recovery ו-bootloader מופיעים ב-bootable/recovery/bootloader_message/bootloader_message.h.

מכשירים עם עדכוני A/B

כדי לתמוך בעדכוני OTA במכשירים שמשתמשים בעדכוני A/B, צריך לוודא שתוכנת האתחול של המכשיר עומדת בקריטריונים הבאים.

קריטריונים כלליים

  • אפשר לעדכן את כל המחיצות באמצעות OTA בזמן שהמערכת הראשית מופעלת (ולא מתעדכנת בשחזור).

  • כדי להפעיל את המחיצה system, טוען האתחול מעביר את הערך הבא בשורת הפקודה של ליבת המערכת: ro root=/dev/[node] rootwait init=/init.

  • באחריות של מסגרת Android לקרוא ל-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), באמצעות קריאה חוזרת (callback) של setActiveBootSlot דרך HAL של בקר האתחול או באמצעות הפקודה 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 של boot control HAL, טוען האתחול צריך לעדכן את הסלוט הנוכחי, לנקות את slot-unbootable ואת slot-successful ולאפס את מספר הניסיונות (זו הדרך היחידה לנקות את slot-unbootable).

מכשירים ללא עדכוני A/B

כדי לתמוך בעדכוני OTA במכשירים שלא משתמשים בעדכוני A/B (ראו מכשירים שאפשר לעדכן אבל לא מסוג A/B), צריך לוודא שטוען האתחול של המכשיר עומד בקריטריונים הבאים.

  • המחיצה recovery צריכה להכיל תמונה שיכולה לקרוא תמונת מערכת ממחיצה נתמכת כלשהי (cache, userdata) ולכתוב אותה במחיצה system.

  • טוען האתחול צריך לתמוך באתחול ישירות למצב שחזור.

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

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

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