תמונות שחזור

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

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

לְשַׁחְרֵר עדכון סכימה תאימות 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 (ש) א/ב לא 2 0, 1, 2 לא
לא A/B לא 2 0, 1, 2 כן
9 (P) א/ב לא 1 0, 1 לא
לא A/B לא 1 0, 1 כן
8 (O) א/ב לא לא רלוונטי (נחשב 0) לא רלוונטי (נחשב 0) לא
לא A/B לא לא רלוונטי (נחשב 0) לא רלוונטי (נחשב 0) כן

* מכשירי A/B המריצים אנדרואיד 11 ומעלה ומשתמשים בתמונת ליבה כללית (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 ​​המריצים אנדרואיד 9 ומעלה יכולים לציין תמונת DTBO/ACPIO לשחזור המכילה מידע מתמונת השכבה כחלק נפרד בפורמט תמונת האתחול ( חייב להשתמש בגרסת כותרת אתחול של 1 או 2).

שינויים בתמונת האתחול

כדי לאפשר לתמונת השחזור להכיל את DTBO או ACPIO לשחזור במכשירים שאינם A/B ​​המריצים Android 9 ומעלה, עדכן את מבנה תמונת האתחול באופן הבא.

קטע תמונת אתחול מספר דפים
כותרת אתחול (עמוד אחד) 1
ליבה (1 עמודים) l = ( kernel_size + page_size - 1) / page_size
Ramdisk (מ דפים) 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 ​​עם 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. מערכת הבנייה של אנדרואיד משתמשת במשתנה כדי להגדיר את הארגומנט recovery_dtbo של הכלי mkbootimg במהלך יצירת תמונת השחזור.

אם המשתנים BOARD_INCLUDE_RECOVERY_DTBO , BOARD_MKBOOTIMG_ARGS ו- BOARD_PREBUILT_DTBOIMAGE מוגדרים כהלכה, מערכת הבנייה של אנדרואיד כוללת את ה-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 כדי לציין את גרסת הכותרת של תמונת האתחול. המשתנה חייב להיות גדול או שווה ל-1 כדי לתמוך ב-ACPIO לשחזור.

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

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