תמונות DTB

הטמעות של 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 שקיימת בקובץ האתחול.