במכשירים שאינם 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 עדיין אפשר להשתמש בתמונת שחזור ייעודית.במכשירים שהושקו עם Android מגרסה 11 ואילך, שלא תומכים בחלוקה למחיצות A/B ומשתמשים בגרסה 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 |
Kernel (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
.