אפשר להשתמש מהדר עץ מכשירים (DTC) כדי להדר את מקור עץ המכשירים (DTS) . עם זאת, לפני שמחילים את עץ שכבת-העל של עץ המכשיר (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
.
איור 1. שימוש בתחביר /include/ כדי לדמות DTO במארח.
- יוצרים עותק של שכבת-העל
.dts
. בעותק, מסירים את לכותרת של השורה הראשונה. דוגמה:/dts-v1/; /plugin/;
שומרים את הקובץ בשםmy_overlay_dt_wo_header.dts
(או בשם כלשהו שם הקובץ הרצוי). - צריך ליצור עותק של
.dts
הראשי. בעותק, אחרי בשורה האחרונה, מוסיפים את תחביר ההכללה של הקובץ שיצרתם בשלב 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 ב-Android 9
ל-Android 9 נדרשת שכבת-על של blob עץ במכשיר (DTBO). כדי להוסיף צמתים או לבצע שינויים במאפיינים ב-SoC העברת נתונים, תוכנת האתחול חייבת ליצור שכבת-על באופן דינמי DT ספציפי למכשיר את SoC DT.
סימון שכבות-על שהוחלו
כדי להפעיל את האפשרות
חבילת הבדיקה של הספק (VTS) כדי להעריך את הנכונות של שכבת-על
אפליקציה, הספקים חייבים להוסיף פרמטר ליבה (kernel) חדש של שורת פקודה
androidboot.dtbo_idx
שמציין את שכבות-העל שנבחרו מ:
מחיצת ה-DTBO. ב-Android 12 נעשה שימוש בגרסת ליבה (kernel)
5.10 ומעלה, הפרמטר הזה עובר דרךbooconfig.
לדוגמה, הפרמטר androidboot.dtbo_idx=x,y,z
מדווח
x
, y
ו-z
כאינדקסים מבוססי האפס של
ארגוני ה-DTO ממחיצת ה-DTBO שהוחלו (בסדר הזה)
מתוכנת האתחול ל-DT הבסיסי.
ניתן להחיל שכבות-על על צמתים מה-DT הראשי או להוסיף צמתים חדשים, אבל לא יכולים להפנות לצומת שנוסף בשכבת-על קודמת. הזה נחוצה מאחר שאפליקציית שכבת-העל לא ממזגת טבלת הסמלים המוצגת בשכבת-על עם טבלת הסמלים הראשית של ה-DT (בלי מיזוגים, כדי למנוע מיזוג התנגשויות בשמות סמלים וסיבוכים של יחסי תלות בין שכבות-על).
דוגמה: שכבות-על לא חוקיות
בדוגמה הזו, overlay_2.dts
מתייחס לצומת
e
, שנוסף על ידי
overlay_1.dts
אחרי החלת overlay_1
על
העברת השיחה הראשית, אם נעשה ניסיון להחיל את overlay_2
כתוצאה מכך, אפליקציית שכבת-העל נכשלה עם שגיאה שהסמל
e
לא נמצא בטבלת הסמלים של
DT בבסיס
Main.dts | שכבת-על_1.dts | שכבת-על_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 | שכבת-על_1.dts | שכבת-על_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
לליבה (kernel) בשורת הפקודה.- הפרמטר חייב לציין את האינדקסים המבוססים על אפס של DTO. מתמונת מחיצת ה-DTBO שהוחלה על ה-DT הבסיסי (באותו מיקום הזמנה).
- האינדקסים חייבים להתייחס למיקום של שכבת-העל ב-DTBO מחיצה.
לפרטים על המבנה של מחיצת DTBO, ניתן לעיין במאמר שכבות-על של עץ מכשיר.
אימות מחיצת ה-DTBO
אפשר להשתמש ב-VTS כדי לאמת את הדברים הבאים:
- קיום של פרמטר שורת הפקודה הליבה
androidboot.dtbo_idx
(על ידי בדיקה של-Init
יש להגדיר אוטומטית את מערכתro.boot.dtbo_idx
המתאימה נכס). - התוקף של מאפיין המערכת
ro.boot.dtbo_idx
(לפי שהמאפיין מציין לפחות תמונת DTBO תקינה אחת אינדקס). - תוקף מחיצת ה-DTBO (מאמת גם את שכבות-העל ב-DTBO) מחיצה שתחול על ה-DT הבסיסי).
- ב-DT שנוצר מוצגים צמתים או שינויים נוספים במאפיינים (property) לליבה (kernel) של Linux.
לדוגמה, בשכבות-העל הבאות וב-DT הסופי, הוספת
androidboot.dtbo_idx=5,3
למעבר לשורת הפקודה בליבה (kernel)
אימות, אבל הוספת androidboot.dtbo_idx=3,5
לליבה (kernel)
שורת הפקודה לא עוברת את האימות.
שכבת-על DT באינדקס 3 | שכבת-על DT באינדקס 5 |
---|---|
[overlay_1.dts] /dts-v1/; /plugin/; &c { prop = <0xfe>; }; |
[overlay_2.dts] /dts-v1/; /plugin/; &c { prop = <0xff>; }; |
חותמת זמן סופית |
---|
/dts-v1/; / { a { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; PRO = <0xfe>; }; __סמלים__ { a = "/a"; b = "/b"; c = "/c"; }; }; |