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

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

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

פריט תוכן עדכון התוכנית תאימות ל-GKI גרסת כותרת האתחול (מכשירים בהשקה) גרסת כותרת האתחול (שדרוג מכשירים) נדרש קובץ אימג' ייעודי לשחזור מערכת ההפעלה
11 A/B,
Virtual A/B
כן ‫3* לא רלוונטי לא
A/B,
Virtual A/B
לא ‫2, 3 0, 1, 2, 3 לא
non-A/B כן 3 לא רלוונטי כן
non-A/B לא ‫2, 3 0, 1, 2, 3 כן
‫10 (Q) A/B לא רלוונטי 2 0, 1, 2 לא
non-A/B לא רלוונטי 2 0, 1, 2 כן
‫9 (P) A/B לא רלוונטי 1 ‫0, 1 לא
non-A/B לא רלוונטי 1 ‫0, 1 כן
‫8 (O) A/B לא רלוונטי לא רלוונטי (נחשב כ-0) לא רלוונטי (נחשב כ-0) לא
non-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 ותמונות שחזור

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

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

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

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

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

פרטים על ארגומנטים של כלי mkbootimg לציון נתיבי תמונת השכבה ותמונת הכותרת של תמונת האתחול זמינים במאמר Boot Image Header Versioning (ניהול גרסאות של כותרת תמונת האתחול).

הטמעה של 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

במכשירים מסוג Non-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 כדי לציין את גרסת הכותרת של קובץ אימג' לאתחול. המשתנה חייב להיות גדול מ-1 או שווה לו כדי לתמוך בשחזור ACPIO.

    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.