תמונות DTB

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

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

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

  • ב-Android 9 ומטה, קובץ האימג' של ה-DTB יכול להיות קיים מחיצה משלו או להיות מוצמדת לליבה (kernel) 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 מעודכן (אבל לפני השלמת העדכון המלא), המכשיר מנסה לאתחל אל מצב שחזור כדי להשלים את ה-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 הארגומנט הוא 0x10000000 והארגומנט dtb_offset הוא 0x01000000, ה-dtb_addr_field בתמונת האתחול הכותרת מאוכלסת כ-0x11000000.

יש להשתמש במשתנה config של הלוח 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 נמצאים בתמונת האתחול.