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