תמונות DTB

בהטמעות של Android יכולות להיות תמונות blob של עץ המכשיר (DTB) לשימוש של תוכנת האתחול. המיקום של תמונת ה-DTB (והאפשרויות לציון פרמטרים של תמונות DTB) שונה בגרסאות של Android.

  • ב-Android 11, מכשירים שמשתמשים בתמונת ליבה כללית (GKI) חייבים לתמוך במחיצת האתחול של הספק, שכוללת את כל המידע הספציפי לספק שהועבר ממחיצת ההפעלה. מכיוון שתמונת ה-DTB מכילה נתונים ספציפיים לספק, היא עכשיו חלק ממחיצת האתחול של הספק. כדי לציין פרמטרים של תמונה מסוג DTB, ראו כותרת האתחול של הספק.

  • ב-Android 10, מכשירים יכולים לכלול את קובץ האימג' של ה-DTB במחיצת ההפעלה. כדי לציין פרמטרים של תמונה מסוג DTB, ראו הכללה של תמונת ה-DTB בתמונת האתחול.

  • ב-Android 9 ומטה, תמונת ה-DTB יכולה להימצא במחיצה משלה או להיות מצורפת לליבה (kernel) image.gz כדי ליצור את תמונת הליבה (kernel) + ה-DTB (שמועברת לאחר מכן אל mkbootimg כדי ליצור את boot.img).

פורמט תמונה מסוג DTB

ב-Android מגרסה 10 ואילך, התמונה ב-DTB צריכה להיות באחד מהפורמטים הבאים:

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

  • מחיצות DTB/DTBO. בתוכנת האתחול יש דרך יעילה לבחור את ה-DT blob הנכון באמצעות בחינת המבנה 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 דפים) 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
DTBO לשחזור (o דפים) 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.

צריך להשתמש במשתנה config של הלוח BOARD_PREBUILT_DTBIMAGE_DIR כדי לציין את הנתיב לתמונה מה-DTB. אם בספרייה BOARD_PREBUILT_DTBIMAGE_DIR יש יותר מקובץ אחד עם הסיומת *.dtb, מערכת ה-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 כאינדקס מבוסס-אפס של עץ המכשיר שנבחר על ידי תוכנת האתחול מקבוצת ה-DTB שנמצאת בתמונת האתחול.