הטמעות של Android יכולות לכלול קובץ blob של עץ המכשיר (DTB) לשימוש של מנהל האתחול. המיקום של קובץ האימג' של DTB (והאפשרויות לציון הפרמטרים של קובץ האימג' של DTB) משתנה בין גרסאות Android.
ב-Android 11, מכשירים שמשתמשים ב-Generic Kernel Image (GKI) חייבים לתמוך במחיצה לאתחול של הספק, שכוללת את כל המידע הספציפי לספק שהועתק מהמחיצה לאתחול. מכיוון שתמונת ה-DTB מכילה נתונים ספציפיים לספק, היא עכשיו חלק ממחיצה האתחול של הספק. כדי לציין פרמטרים של קובץ אימג' DTB, אפשר לעיין במאמר כותרת האתחול של הספק.
ב-Android 10, המכשירים יכולים לכלול את קובץ האימג' של DTB במחיצה לאתחול. במאמר הכללת קובץ האימג' של DTB בקובץ האימג' של האתחול מוסבר איך מציינים פרמטרים של קובץ אימג' של DTB.
ב-Android 9 ובגרסאות ישנות יותר, קובץ האימג' של DTB יכול להתקיים במחיצה משלו או להתווסף לליבה
image.gz
כדי ליצור את קובץ האימג' של הליבה + DTB (שאחר כך מועבר ל-mkbootimg
כדי ליצור אתboot.img
).
פורמט קובץ תמונה של DTB
ב-Android מגרסה 10 ואילך, קובץ האימג' של DTB חייב להיות באחד מהפורמטים הבאים:
blobs DT משורשרים אחד אחרי השני. תוכנת האתחול משתמשת בשדה
totalsize
בכל כותרת FDT כדי לקרוא ולנתח את ה-blob המתאים.מחיצות DTB/DTBO למחולל האתחול יש דרך יעילה לבחור את ה-blob הנכון של DT על ידי בדיקת המבנה
dt_table_entry
(שמכיל את השדותid
,rev
ו-custom
) שיכול להכיל מידע מזהה של החומרה עבור הרשומה. פרטים נוספים זמינים במאמר מחיצות DTB/DTBO.
הוספת קובץ האימג' של DTB לקובץ האימג' של האתחול
מכשירים עם Android 10 יכולים לכלול את קובץ האימג' של ה-DTB בתמונת האתחול. הפעולה הזאת מבטלת את הצורך ב-Android לתמוך בסקריפטים שמצרפים את תמונת ה-DTB ל-image.gz
בליבה, ומאפשרת להשתמש בבדיקה של Vendor Test Suite (VTS) כדי לאמת (ולבצע סטנדרטיזציה) של מיקום DTB.
בנוסף, במכשירים שאינם A/B, בטוח יותר לשמור את ה-DTB כחלק מתמונת השחזור ולא במחיצה נפרדת, כדי למנוע בעיות שנגרמות כתוצאה מהפרעות בעדכוני OTA. במהלך עדכון OTA, אם מתרחשת בעיה אחרי שמחיצה DTB מתעדכנת (אבל לפני השלמת העדכון המלא), המכשיר מנסה להפעיל את מצב השחזור כדי להשלים את העדכון. עם זאת, מכיוון שמחיצה DTB כבר עודכנה, ייתכן שיהיה חוסר התאמה עם קובץ האימג' של השחזור (שעדיין לא עודכן). הוספת קובץ האימג' של DTB כחלק מהפורמט של קובץ האימג' להפעלה מונעת בעיות כאלה, כי קובץ האימג' לשחזור הופך להיות עצמאי (כלומר, הוא לא תלוי במחיצה אחרת).
המבנה של קובץ האימג' לאתחול
במכשירים עם Android 10 אפשר לכלול קובץ אימג' של DTB באמצעות המבנה הבא של קובץ האימג' לאתחול.
הקטע של קובץ האימג' לאתחול | מספר הדפים |
---|---|
כותרת אתחול (דף אחד) | 1 |
ליבה (l pages) | l = (kernel_size + page_size -
1) / page_size |
Ramdisk (m דפים) | m = (ramdisk_size + page_size -
1) / page_size |
תוכנת אתחול בשלב שני (n דפים) | n = (second_size + page_size -
1) / page_size |
Recovery DTBO (o pages) | o = (recovery_dtbo_size + page_size -
1) / page_size |
DTB (p דפים) | p = (dtb_size + page_size -
1) / page_size |
נתיב קובץ האימג' של DTB
במכשירים עם Android מגרסה 10, אפשר להשתמש בכלי mkbootimg.py
ובארגומנטים הבאים כדי לציין את הנתיב לקובץ האימג' של DTB.
ארגומנט | תיאור |
---|---|
dtb |
הנתיב לתמונת ה-DTB שרוצים לכלול בתמונות האתחול או השחזור. |
dtb_offset |
כשמוסיפים את הפרמטר base לארגומנט base , מקבלים את כתובת העומס הפיזית
של עץ המכשיר הסופי. לדוגמה, אם הארגומנט base הוא 0x10000000 והארגומנט dtb_offset הוא 0x01000000 , הערך של dtb_addr_field בכותרת של קובץ האימג' להפעלה יהיה 0x11000000 . |
צריך להשתמש במשתנה התצורה של הלוח BOARD_PREBUILT_DTBIMAGE_DIR
כדי לציין את הנתיב לתמונת ה-DTB. אם יש יותר מקובץ אחד עם הסיומת *.dtb
בתיקייה BOARD_PREBUILT_DTBIMAGE_DIR
, מערכת ה-build של Android תכליל את הקבצים כדי ליצור את קובץ האימג' הסופי של DTB שמשמש ליצירת קובץ האימג' של האתחול.
כדי להעביר את הארגומנט dtb
אל mkbootimg.py
עם קובץ האימג' של DTB מהספרייה שצוינה על ידי BOARD_PREBUILT_DTBIMAGE_DIR
, צריך להגדיר את משתנה התצורה של הלוח BOARD_INCLUDE_DTB_IN_BOOTIMG
כ-true
. לדוגמה:
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
אפשר לצרף את הארגומנט dtb_offset
למשתנה config של הלוח BOARD_MKBOOTIMG_ARGS
עם ההיסטים האחרים וגרסת הכותרת. לדוגמה:
BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --dtb_offset $(BOARD_DTB_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
תמיכה בתוכנת אתחול
כדי ש-VTS יפעל בהצלחה במכשירים עם Android 10, מנהל האתחול צריך לתמוך בתמונת האתחול המעודכנת ולהוסיף את הפרמטר androidboot.dtb_idx
בשורת הפקודה של הליבה כדי לציין את האינדקס של עץ המכשיר (DT) שנבחר. אפשר לציין אינדקס אחד בלבד (1). לדוגמה, הפרמטר androidboot.dtb_idx=N
מדווח על N
בתור המדד שמתחיל באפס של עץ המכשיר שנבחר על ידי מנהל האתחול מתוך קבוצת ה-DTBs שקיימת בקובץ האתחול.