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