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