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

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

פרטים על התוכן של בלוק בזיכרון הפלאש שמשמש לתקשורת על ידי שחזור ותוכנת אתחול זמינים במאמר 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), באמצעות ה-HAL של בקר האתחול דרך הקריאה החוזרת 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 וכו').

כשמגדירים את המשבצת הנוכחית באמצעות הפקודה fastboot set_active או הפקודה setActiveBootSlot של boot control HAL, טוען האתחול צריך לעדכן את המשבצת הנוכחית, לנקות את slot-unbootable ואת slot-successful ולאפס את מספר הניסיונות (זו הדרך היחידה לנקות את slot-unbootable).

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

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

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

  • תוכנת האתחול צריכה לתמוך באתחול ישירות למצב שחזור.

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

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

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