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