תמונות DTB

יישומי אנדרואיד יכולים לכלול תמונת עץ התקן (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 הקיימת בתמונת האתחול.