תמונות לשחזור

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

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

פריט תוכן עדכון סכימה תאימות ל-GKI גרסת הכותרת של האתחול (מכשירים להשקה) גרסת הכותרת של האתחול (שדרוג מכשירים) נדרשת קובץ אימג' ייעודי לשחזור
11 A/B,
Virtual 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 יכולים עדיין להשתמש בתמונת שחזור ייעודית.

  • במכשירים שאינם 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 = (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.