קומפילציה ואימות

אתה יכול להשתמש ב-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 .

איור 1. השתמש בתחביר /include/ כדי לדמות DTO במארח
  1. צור עותק של שכבת העל .dts . בעותק, הסר את כותרת השורה הראשונה. דוגמה:
    /dts-v1/;
    /plugin/;
    
    שמור את הקובץ בתור my_overlay_dt_wo_header.dts (או כל שם קובץ שתרצה).
  2. צור עותק של .dts הראשי. בעותק, לאחר השורה האחרונה, הוסף את תחביר ה-include עבור הקובץ שיצרת בשלב 1. לדוגמה:
    /include/ "my_overlay_dt_wo_header.dts"
    
    שמור את הקובץ בתור my_main_dt_with_include.dts (או כל שם קובץ שתרצה).
  3. השתמש dtc כדי לקמפל my_main_dt_with_include.dts כדי לקבל את ה-DT הממוזג, שאמורה להיות אותה תוצאה כמו DTO. לדוגמה:
    dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
    
  4. השתמש 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 הנדרשת, ודא שמטען האתחול יכול לבצע את הפעולות הבאות:

  1. זהה את הלוח עליו הוא פועל ובחר את שכבת-העל המתאימה ליישום.
  2. הוסף את הפרמטר 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";
	};
};