קובצי אימג' לשחזור

במכשירים שאינם A/B, קובץ האימג' לשחזור צריך להכיל מידע מ-device tree blob‏ (DTB) או מתמונת שכבת-על של Advanced Configuration and Power Interface‏ (ACPI). כשמכשירים כאלה מתחילים לפעול במצב שחזור, מנהל האתחול יכול לטעון את קובץ האימג' של שכבת-העל שתואם לקובץ האימג' של שחזור המערכת. במכשירים שתומכים בעדכוני A/B (חלקים), צריך להשתמש בתהליך שחזור כמצב הפעלה במקום במחיצה נפרדת לשחזור (פרטים נוספים זמינים במאמר הטמעת עדכוני A/B).

האפשרויות להכללת DTBO/ACPIO לשחזור כחלק מקובץ האימג' להפעלה או לשחזור משתנות בין גרסאות Android.

פריט תוכן עדכון הסכימה תאימות ל-GKI גרסת הכותרת של האתחול (מכשירים להשקה) גרסת הכותרת של האתחול (שדרוג מכשירים) נדרשת תמונה ייעודית לשחזור
11 A/B,‏
A/B וירטואלי
כן 3* לא רלוונטי לא
A/B,‏
A/B וירטואלי
לא 2, 3 0, 1, 2, 3 לא
ללא בדיקת A/B כן 3 לא רלוונטי כן
ללא בדיקת A/B לא 2, 3 0, 1, 2, 3 כן
10 (Q) A/B לא רלוונטי 2 0, 1, 2 לא
ללא בדיקת A/B לא רלוונטי 2 0, 1, 2 כן
9 (P) A/B לא רלוונטי 1 0, 1 לא
ללא בדיקת A/B לא רלוונטי 1 0, 1 כן
8 (O) A/B לא רלוונטי לא רלוונטי (נחשב כ-0) לא רלוונטי (נחשב כ-0) לא
ללא בדיקת A/B לא רלוונטי לא רלוונטי (נחשב כ-0) לא רלוונטי (נחשב כ-0) כן

* מכשירי A/B עם Android מגרסה 11 ואילך שמשתמשים ב-Generic Kernel Image‏ (GKI) חייבים להשתמש בגרסה ראשית של כותרת האתחול 3 כדי להיות תואמים למחיצה של אתחול הספק.

נקודות עיקריות:

  • במכשירי A/B אין צורך לציין קובץ אימג' לשחזור, כי עדכוני A/B משתמשים בשתי קבוצות של מחיצות (כולל boot ו-dtbo) ומעבירים ביניהם במהלך העדכונים, כך שאין צורך בקובץ אימג' לשחזור. עדיין אפשר להשתמש בתמונה ייעודית לשחזור במכשירים עם חלוקה לשני עננים.

  • במכשירים שאינם A/B שמופעלים עם Android מגרסה 11 ואילך, שמשתמשים בכותרת אתחול בגרסה 3, צריך לציין במפורש כותרת אתחול בגרסה 2 לתמונת השחזור בנפרד. לדוגמה:

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • בארכיטקטורות שלא תומכות בעצי מכשירים, קובץ האימג' של השחזור יכול לכלול קובץ אימג' של ACPIO במקום קובץ אימג' של DTBO.

מידע על כשלים בעדכונים אוטומטיים ועל קובצי אימג' לשחזור

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

כדי למנוע מהשחזור להסתמך על המחיצה DTBO/ACPIO במהלך העדכון, במכשירים שאינם A/B עם Android מגרסה 9 ואילך אפשר לציין קובץ אימג' של DTBO/ACPIO לשחזור שמכיל מידע מקובץ האימג' של שכבת-העל כקטע נפרד בפורמט קובץ האימג' של האתחול (חובה להשתמש בגרסת כותרת אתחול 1 או 2).

שינויים בקובץ האימג' לאתחול

כדי לאפשר לתמונת השחזור להכיל את ה-DTBO או את ה-ACPIO של השחזור במכשירים שאינם A/B עם Android מגרסה 9 ואילך, מעדכנים את המבנה של קובץ האימג' של האתחול באופן הבא.

הקטע של קובץ האימג' לאתחול מספר הדפים
כותרת אתחול (דף אחד) 1
ליבה (l דפים) l = (kernel_size + page_size - 1) / page_size
דיסק זיכרון (m דפים) m = (ramdisk_size + page_size - 1) / page_size
תוכנת אתחול שלב שני (n דפים) n = (second_size + page_size - 1) / page_size
שחזור DTBO או ACPIO (דפים o) o = (recovery_[dtbo|acpio]_size + page_size - 1) / page_size

פרטים על הארגומנטים של הכלי mkbootimg להגדרת גרסת הכותרת של קובץ האימג' להפעלה ונתיבי קובצי האימג' של שכבת-העל מופיעים במאמר ניהול גרסאות של כותרות של קובצי אימג' להפעלה.

הטמעת DTBO

במכשירים ללא תמיכה ב-A/B עם Android מגרסה 9 ואילך אפשר לאכלס את הקטע recovery_dtbo בתמונת השחזור. כדי לכלול את התמונה recovery_dtbo ב-recovery.img, במכשיר BoardConfig.mk:

  • מגדירים את קובץ התצורה BOARD_INCLUDE_RECOVERY_DTBO לערך true:

     BOARD_INCLUDE_RECOVERY_DTBO := true
    
  • מרחיבים את המשתנה BOARD_MKBOOTIMG_ARGS כדי לציין את גרסת הכותרת של קובץ האימג' להפעלה:

    BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • מוודאים שהמשתנה BOARD_PREBUILT_DTBOIMAGE מוגדר לנתיב של קובץ האימג' של ה-DTBO. מערכת ה-build של Android משתמשת במשתנה כדי להגדיר את הארגומנט recovery_dtbo של הכלי mkbootimg במהלך יצירת קובץ האימג' לשחזור.

אם המשתנים BOARD_INCLUDE_RECOVERY_DTBO,‏ BOARD_MKBOOTIMG_ARGS ו-BOARD_PREBUILT_DTBOIMAGE מוגדרים בצורה נכונה, מערכת ה-build של Android תכלול את ה-DTBO שצוין על ידי המשתנה BOARD_PREBUILT_DTBOIMAGE בקובץ recovery.img.

הטמעת ACPIO

במכשירים שאינם A/B עם Android מגרסה 9 ואילך אפשר להשתמש בתמונה עם שכבת-על של ACPIO (במקום תמונה של DTBO) וליישב את הקטע recovery_acpio (במקום הקטע recovery_dtbo) של קובץ האימג' לשחזור. כדי לכלול את התמונה recovery_acpio ב-recovery.img, במכשיר BoardConfig.mk:

  • מגדירים את קובץ התצורה BOARD_INCLUDE_RECOVERY_ACPIO לערך true:

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • מרחיבים את המשתנה BOARD_MKBOOTIMG_ARGS כדי לציין את גרסת הכותרת של קובץ האימג' להפעלה. כדי לתמוך בשחזור של ACPIO, הערך של המשתנה צריך להיות גדול מ-1 או שווה לו.

    BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • מוודאים שהמשתנה BOARD_RECOVERY_ACPIO מוגדר לנתיב של קובץ האימג' של ACPIO. מערכת ה-build של Android משתמשת במשתנה כדי להגדיר את הארגומנט recovery_acpio של הכלי mkbootimg במהלך היצירה של קובץ האימג' לשחזור.

אם המשתנים BOARD_INCLUDE_RECOVERY_ACPIO,‏ BOARD_MKBOOTIMG_ARGS ו-BOARD_RECOVERY_ACPIO מוגדרים בצורה נכונה, מערכת ה-build של Android תכלול את ה-ACPIO שצוין על ידי המשתנה BOARD_RECOVERY_ACPIO בקובץ recovery.img.