קובצי אימג' של 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 צריכה להיות באחד מהפורמטים הבאים:

  • בלובים של DT שמשורשרים אחד אחרי השני. טוען האתחול משתמש בשדה totalsize בכל כותרת FDT כדי לקרוא ולנתח את ה-blob המתאים.

  • מחיצות DTB/DTBO. ל-bootloader יש דרך יעילה לבחור את ה-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 (אבל לפני השלמת העדכון המלא), המכשיר מנסה לבצע אתחול למצב שחזור כדי להשלים את עדכון ה-OTA. עם זאת, מכיוון שמחיצת DTB כבר עודכנה, יכול להיות שיהיה חוסר התאמה עם קובץ האימג' של השחזור (שעדיין לא עודכן). הכללת תמונת ה-DTB כחלק מפורמט קובץ אימג' לאתחול מונעת בעיות כאלה, כי היא מאפשרת לקובץ אימג' לשחזור מערכת ההפעלה להיות עצמאי (כלומר, הוא לא תלוי במחיצה אחרת).

מבנה קובץ האימג' לאתחול

מכשירים עם Android 10 יכולים לכלול קובץ אימג' של DTB באמצעות המבנה הבא של קובץ אימג' לאתחול.

הקטע 'קובץ אימג' לאתחול' מספר הדפים
כותרת עליונה של הפעלה (דף אחד) 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 (o pages) o = (recovery_dtbo_size + page_size - 1) / page_size
DTB (p pages) p = (dtb_size + page_size - 1) / page_size

נתיב לתמונה ב-DTB

במכשירים עם Android 10, אפשר להשתמש בכלי mkbootimg.py ובארגומנטים הבאים כדי לציין את הנתיב לתמונה של DTB.

ארגומנט תיאור
dtb הנתיב לתמונת ה-DTB שרוצים לכלול בתמונות של האתחול או השחזור.
dtb_offset כשמוסיפים אותו לארגומנט base, הוא מספק את כתובת הטעינה הפיזית של פירוט מבנה המכשיר (DT) הסופי. לדוגמה, אם הארגומנט 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 למשתנה BOARD_MKBOOTIMG_ARGS board config עם ההיסטים האחרים וגרסת הכותרת. לדוגמה:

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) שנבחר. אפשר לציין רק אינדקס אחד. לדוגמה, הפרמטר androidboot.dtb_idx=N מדווח על N בתור האינדקס מבוסס-האפס של פירוט מבנה המכשיר (DT) שנבחר על ידי תוכנת אתחול מתוך קבוצת ה-DTB שקיימים בקובץ אימג' לאתחול.