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

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

לפרטים על התוכן של בלוק ב-Flash שמשמש לתקשורת של שחזור ושל תוכנת האתחול, עיינו במאמר bootload/recovery/bootloader_message/bootloader_message.h.

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

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

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

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

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

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

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

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

תמיכה במשבצות

תוכנת האתחול צריכה לתמוך בפונקציונליות שקשורה למחיצות וליחידות קיבולת (Slot), כולל:

  • שמות של מחיצות צריכים לכלול סיומת שמזהה אילו מחיצות שייכות למיקום מסוים בתוכנת האתחול. לכל חלוקה כזו, יש משתנה תואם has-slot:partition base name עם הערך yes. השמות של המשבצות מופיעים בסדר אלפביתי בתור a , b , c וכו', שמתאימים למחיצות עם הסיומת _a , _b , _c וכו'. תוכנת האתחול צריכה להודיע למערכת ההפעלה איזו חריץ הופעלה באמצעות מאפיין שורת הפקודה androidboot.slot_suffix. המאפיין הזה מוגדר באמצעות robotsconfig למכשירים שמופעלים עם Android מגרסה 12 ואילך.

  • הערך של slot-retry-count מאופס לערך חיובי (בדרך כלל 3), על ידי HAL של בקרת האתחול דרך הקריאה החוזרת של setActiveBootSlot או באמצעות הפקודה fastboot set_active. כשמשנים מחיצה שהיא חלק מחריץ, תוכנת האתחול מוחקת את ההודעה 'בוצעה אתחול' ומאפסת את מספר הניסיונות החוזרים של יחידת הקיבולת.

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

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

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

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

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

  5. הפעלה. אם הערך לא מסומן בתור slot-successful, צריך להנמיך את הערך slot-retry-count.

כלי השירות fastboot קובע איזו מחיצה שתהבהב כאשר מריצים פקודות Flash. לדוגמה, אם מריצים את הפקודה fastboot flash system system.img קודם שולחים שאילתה למשתנה current-slot ואז משרשרים את התוצאה למערכת כדי ליצור את שם המחיצה שאותה צריך להבהב (system_a, system_b וכו').

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

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

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

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

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

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

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

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