יישומי אנדרואיד יכולים לכלול תמונת עץ התקן (DTB) לשימוש על ידי טוען האתחול. המיקום של תמונת DTB (והאפשרויות לציון פרמטרים של תמונת DTB) שונה בין גרסאות אנדרואיד.
ב-Android 11, מכשירים המשתמשים בתמונת הקרנל הגנרית (GKI) חייבים לתמוך במחיצת האתחול של הספק , הכוללת את כל המידע הספציפי לספק שהועבר ממחיצת האתחול. מכיוון שתמונת DTB מכילה נתונים ספציפיים לספק, היא כעת חלק ממחיצת האתחול של הספק. כדי לציין פרמטרים של תמונת DTB, ראה כותרת אתחול של ספק .
באנדרואיד 10, מכשירים יכולים לכלול את תמונת ה-DTB במחיצת האתחול. כדי לציין פרמטרים של תמונת DTB, ראה הכללת תמונת DTB בתמונת האתחול .
באנדרואיד 9 ומטה, תמונת ה-DTB יכולה להתקיים במחיצה משלה או להיות מצורפת ל-kernel
image.gz
כדי ליצור את תמונת הקרנל + DTB (שמועברת לאחר מכן ל-mkbootimg
כדי ליצורboot.img
).
פורמט תמונה DTB
ב-Android 10 ומעלה, תמונת DTB חייבת להשתמש באחד מהפורמטים הבאים:
כתמי DT שרשורו אחד אחרי השני. טוען האתחול משתמש בשדה
totalsize
בכל כותרת FDT כדי לקרוא ולנתח את הבלוק המתאים.מחיצות DTB/DTBO. למטען האתחול יש דרך יעילה לבחור את ה-DT בלוק הנכון על ידי בחינת מבנה
dt_table_entry
(מכילid
,rev
ושדותcustom
) שיכול להחזיק מידע מזהה חומרה עבור הערך). לפרטים, ראה מחיצות DTB/DTBO .
כולל תמונת DTB בתמונת האתחול
מכשירים עם אנדרואיד 10 יכולים לכלול את תמונת ה-DTB בתמונת האתחול. זה מסיר את הצורך של אנדרואיד לתמוך בסקריפטים שמצרפים את תמונת ה-DTB ל- image.gz
בקרנל, ומאפשר שימוש בבדיקת Vendor Test Suite (VTS) כדי לאמת (ולתקנן) את מיקום ה-DTB.
בנוסף, עבור התקנים שאינם A/B, בטוח יותר להחזיק את ה-DTB כחלק מתמונת השחזור במקום במחיצה נפרדת כדי למנוע בעיות הנגרמות על ידי OTAs מופרעות. במהלך OTA, אם מתרחשת בעיה לאחר עדכון מחיצת DTB (אך לפני השלמת העדכון המלא), ההתקן מנסה לאתחל למצב שחזור כדי להשלים את ה-OTA; עם זאת, מכיוון שמחיצת ה-DTB כבר עודכנה, עלולה להתרחש אי התאמה עם תמונת השחזור (שעדיין לא עודכנה). קבלת תמונת DTB כחלק מפורמט תמונת האתחול מונעת בעיות כאלה על ידי הפיכת תמונת השחזור לעצמה (כלומר, היא לא תלויה במחיצה אחרת).
מבנה תמונת אתחול
מכשירים עם אנדרואיד 10 יכולים לכלול תמונת DTB באמצעות מבנה תמונת האתחול הבא.
קטע תמונת אתחול | מספר דפים |
---|---|
כותרת אתחול (עמוד אחד) | 1 |
ליבה (1 עמודים) | l = ( kernel_size + page_size - 1) / page_size |
Ramdisk (מ דפים) | 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
עבור מכשירים עם אנדרואיד 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_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
כאינדקס מבוסס אפס של עץ ההתקן שנבחר על ידי טוען האתחול מתוך קבוצת ה-DTBs הקיימת בתמונת האתחול.