אתה יכול להשתמש ב-Device Tree Compiler (DTC) כדי להרכיב את קבצי המקור של Device Tree. עם זאת, לפני החלת שכבת DT על ה-DT הראשי של היעד, עליך גם לאמת את התוצאה על ידי הדמיית ההתנהגות של DTO.
קומפילציה עם DTC
בעת שימוש dtc
כדי להדר .dts
, עליך להוסיף אפשרות -@
כדי להוסיף צומת __symbols__
ב- .dtbo
המתקבל. הצומת __symbols__
מכיל רשימה של כל הצמתים המסומנים בתווית, שבה ספריית DTO יכולה להשתמש להפניות.
פקודה לדוגמה לבניית DT .dts
הראשי:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
פקודה לדוגמה לבניית שכבת העל DT .dts
:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
אמת את תוצאות DTO על המארח
אימות יכול לעזור לך לזהות שגיאות שעלולות להתרחש בעת הצבת DT שכבת העל ב-DT הראשי. לפני עדכון היעד, אתה יכול לאמת את התוצאה של שכבת DT על המארח על ידי הדמיית ההתנהגות של DTO באמצעות /include/
ב- .dts
.
/include/
כדי לדמות DTO במארח- צור עותק של שכבת העל
.dts
. בעותק, הסר את כותרת השורה הראשונה. דוגמה:/dts-v1/; /plugin/;
שמור את הקובץ בתורmy_overlay_dt_wo_header.dts
(או כל שם קובץ שתרצה). - צור עותק של
.dts
הראשי. בעותק, לאחר השורה האחרונה, הוסף את תחביר ה-include עבור הקובץ שיצרת בשלב 1. לדוגמה:/include/ "my_overlay_dt_wo_header.dts"
שמור את הקובץ בתורmy_main_dt_with_include.dts
(או כל שם קובץ שתרצה). - השתמש
dtc
כדי לקמפלmy_main_dt_with_include.dts
כדי לקבל את ה-DT הממוזג, שאמורה להיות אותה תוצאה כמו DTO. לדוגמה:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
- השתמש
dtc
כדי להשליךmy_merged_dt.dto
.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
אימות DTO באנדרואיד 9
אנדרואיד 9 דורשת מחיצת Device Tree Blob Overlay (DTBO). כדי להוסיף צמתים או לבצע שינויים במאפיינים ב-SoC DT, על טוען האתחול לכסות באופן דינמי DT ספציפי להתקן על פני ה-SoC DT.
מציין שכבות-על שהוחלו
כדי לאפשר ל- Vendor Test Suite (VTS) להעריך את נכונות אפליקציית שכבת-העל, על הספקים להוסיף פרמטר חדש של שורת הפקודה androidboot.dtbo_idx
המציין את שכבות-העל שנבחרו ממחיצת ה-DTBO. באנדרואיד 12 המשתמש בגרסת ליבה 5.10 ומעלה, פרמטר זה עובר דרך bootconfig. לדוגמה, הפרמטר androidboot.dtbo_idx=x,y,z
מדווח על x
, y
ו- z
כמדדים מבוססי אפס של שכבות עץ התקנים (DTOs) ממחיצת DTBO שהוחלה (בסדר זה) על ידי טוען האתחול על הבסיס עץ התקנים (DT).
שכבות-על יכולות להחיל על צמתים מעץ המכשיר הראשי או להוסיף צמתים חדשים, אך אינן יכולות להתייחס לצומת שנוסף בשכבת-על קודמת. הגבלה זו נחוצה מכיוון שיישום שכבת-העל אינו ממזג את טבלת סמלי-העל עם טבלת הסמלים הראשית של DT (אי מיזוג מונע התנגשויות בשמות סמלים וסיבוך של תלות בין שכבות-על).
דוגמה: שכבות על לא חוקיות
בדוגמה זו, overlay_2.dts
מתייחס לצומת e
, שנוסף על ידי overlay_1.dts
. לאחר החלת overlay_1
על ה-DT הראשי, אם נעשה ניסיון להחיל overlay_2
על ה-DT שנוצר, אפליקציית השכבה תיכשל עם שגיאה לפיה הסמל e
אינו קיים בטבלת הסמלים עבור הבסיס DT.
main.dts | overlay_1.dts | overlay_2.dts |
---|---|---|
[main.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; | [overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e: e { prop = <0x0a>; phandle = <0x04>; }; }; | [overlay_2.dts] /dts-v1/; /plugin/; /* invalid! */ &e { prop = <0x0b>; }; |
דוגמה: שכבות-על חוקיות
בדוגמה זו, overlay_2.dts
מתייחס רק לצומת b
מה-DTS הראשי. כאשר overlay_1
מוחל על הבסיס DT, ולאחר מכן יישום של overlay_2
, הערך של המאפיין prop
בצומת e
(מוגדר על ידי overlay_1.dts
) מוחלף על ידי הערך שנקבע על ידי overlay_2.dts
.
main.dts | overlay_1.dts | overlay_2.dts |
---|---|---|
[final.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; | [overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e { prop = <0x0c>; }; }; | [overlay_2.dts] /dts-v1/; /plugin/; /* valid */ &b { ref1 = <&c>; e { prop = <0x0d>; }; }; |
יישום מחיצת DTBO
כדי ליישם את מחיצת ה-DTBO הנדרשת, ודא שמטען האתחול יכול לבצע את הפעולות הבאות:
- זהה את הלוח עליו הוא פועל ובחר את שכבת-העל המתאימה ליישום.
- הוסף את הפרמטר
androidboot.dtbo_idx
לשורת הפקודה של הליבה.- הפרמטר חייב לציין, את המדדים מבוססי האפס של ה-DTOs מתמונת מחיצת ה-DTBO שהחיל על ה-DT הבסיס (באותו סדר).
- המדדים חייבים להתייחס למיקום שכבת העל במחיצת ה-DTBO.
לפרטים על מבנה מחיצת ה-DTBO, עיין ב- Device Tree Overlays ב-source.android.com.
אימות מחיצת DTBO
אתה יכול להשתמש ב-VTS כדי לאמת את הדברים הבאים:
- קיום של פרמטר שורת הפקודה של הליבה
androidboot.dtbo_idx
(על ידי בדיקה ש-Init
הגדיר אוטומטית את מאפיין המערכת התואםro.boot.dtbo_idx
). - תוקף מאפיין המערכת
ro.boot.dtbo_idx
(על ידי בדיקה שהמאפיין מציין לפחות אינדקס תמונת DTBO חוקי אחד). - תוקף מחיצת ה-DTBO (מאמת גם את שכבות-העל במחיצת ה-DTBO המוחלות על ה-DT הבסיסי).
- צמתים נוספים או שינויים במאפיינים ב-DT שנוצר מוצגים לליבת לינוקס.
לדוגמה, בשכבות העל הבאות וב-DT הסופי, הוספת androidboot.dtbo_idx=5,3
לשורת הפקודה של הליבה עוברת אימות אך הוספת androidboot.dtbo_idx=3,5
לשורת הפקודה של הליבה אינה עוברת אימות.
שכבת DT באינדקס 3 | שכבת DT באינדקס 5 |
---|---|
[overlay_1.dts] /dts-v1/; /plugin/; &c { prop = <0xfe>; }; | [overlay_2.dts] /dts-v1/; /plugin/; &c { prop = <0xff>; }; |
DT סופי |
---|
/dts-v1/; / { a { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; prop = <0xfe>; }; __symbols__ { a = "/a"; b = "/b"; c = "/c"; }; }; |
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2024-04-29 (שעון UTC).