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