הטמעות של 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 שמקושרים זה לזה bootloader משתמש בשדה
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 דפים) | 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 |
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 הוא 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
למשתנה boardconfig 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 שקיימים בקובץ האתחול.