תמונות DTB

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

  • ב-Android 11, מכשירים שמשתמשים בליבה כללית (Kernel) כללית תמונה (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 מעודכן (אבל לפני השלמת העדכון המלא), המכשיר מנסה לאתחל אל מצב שחזור כדי להשלים את ה-OTA; אבל מכיוון שמחיצת ה-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 ללוח BOARD_MKBOOTIMG_ARGS 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 נמצאים בתמונת האתחול.