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

במכשירים שאינם 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 ותמונות שחזור

כדי למנוע כשלים בעדכון אופליין (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 בגרסה 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.