תחביר DTO

פורמט מקור עץ המכשיר (DTS) הוא ייצוג טקסטואלי של עץ מכשיר (DT). המהדר של עץ המכשירים (DTC) מעבד את הפורמט הזה ל-DT בינארי, שזו התבנית הצפויה על ידי הליבה של Linux.

שימוש בהפניות

ה-DTC (מהדר עץ מכשירים + תיקונים של שכבות-על) מתאר את פורמט DTS ב- dtc-format.txt וגם Manual.txt. הפורמט והכללים של DTO מתוארים ב dt-object-internal.txt. במסמכים האלה מוסבר איך לעדכן את ה-DT הראשי באמצעות צומת fragment@x ותחביר __overlay__ בשכבת-העל DT. עבור דוגמה:

/ {
  fragment@0
{
    target
= <&some_node>;
      __overlay__
{
        some_prop
= "okay";
       
...
     
};
 
};
};

עם זאת, Google ממליצה מאוד לא להשתמש fragment@x ואת התחביר __overlay__, ובמקום זאת צריך להשתמש תחביר הפניה. לדוגמה:

&some_node {
  some_prop
= "okay";
 
...
};

התחביר של קובץ העזר עבר הידור על ידי dtc לאותו אובייקט כמו שלמעלה באמצעות התחביר __overlay__. התחביר הזה לא מחייב אתכם למספר את המקטעים, וכך תוכל לקרוא ולכתוב בקלות DTS של שכבת-על. אם dtc לא תומך בסוכר התחבירי הזה, צריך להשתמש בפונקציה dtc ב-AOSP.

שימוש בתוויות

כדי לאפשר הפניות לא מוגדרות לצמתים שלא נמצאים בזמן ההידור, הפונקציה לקובץ שכבת-העל DT .dts חייב להיות תג /plugin/ הכותרת. לדוגמה:

/dts-v1/;
/plugin/;

מכאן אפשר לטרגט את הצמתים לשכבת-על באמצעות הפניה, נתיב מוחלט של צומת עם קידומת של אמפרסנד (&). לדוגמה, node@0 בשיחה הראשית (DT):

להגדיר תוויות ב-DT הראשי ... ... ולאחר מכן להשתמש בתוויות.
[my_main_dt.dts]

/dts-v1/;

/ {
  my_node
: node@0 {
    status
= "disabled";

    my_child
: child@0 {
      value
= <0xffffffff>;
   
};
 
};
};
[my_overlay_dt.dts]

/dts-v1/;
/plugin/;

&my_node {
  status
= "okay";
};

&my_child {
  value
= <0x1>;
};

שינוי מברירת המחדל

אם מאפיין יעד ההפניה קיים ב-DT הראשי, הוא מבוטל אחרי DTO; אחרת, הוא מצורף. לדוגמה:

Main.dts שכבת-על.dts התוצאה מוזגת
[my_main_dt.dts]

/dts-v1/;

/ {
  compatible
= "corp,foo";

  my_node
: node@0 {
    status
= "disabled";
 
};
};
[my_overlay_dt.dts]

/dts-v1/;
/plugin/;

&my_node {
  status
= "okay";
};
/dts-v1/;

/ {
  compatible
= "corp,foo";

 
...

  node@0
{
    linux
,phandle = <0x1>;
    phandle
= <0x1>;
    status
= "okay";
 
};
};

צרף

אם נכס היעד של קובץ העזר לא קיים ב-DT הראשי, מצורף אחרי DTO. לדוגמה:

Main.dts שכבת-על.dts התוצאה מוזגת
[my_main_dt.dts]

/dts-v1/;

/ {
  compatible
= "corp,foo";

  my_node
: node@0 {
    status
= "okay";
 
};
};
[my_overlay_dt.dts]

/dts-v1/;
/plugin/;

&my_node {
  new_prop
= "bar";
};
/dts-v1/;

/ {
  compatible
= "corp,foo";

 
...

  node@0
{
    linux
,phandle = <0x1>;
    phandle
= <0x1>;
    status
= "okay";
    new_prop
= "bar";
 
};
};

צומתי צאצא

דוגמאות לתחביר של צומתי צאצא:

Main.dts שכבת-על.dts התוצאה מוזגת
[my_main_dt.dts]

/dts-v1/;

/ {
  compatible
= "corp,foo";

  my_nodes
: nodes {
    compatible
= "corp,bar";

    node@0
{
      status
= "disabled";
   
};
 
};
};
[my_overlay_dt.dts]

/dts-v1/;
/plugin/;

&my_nodes {
  new_prop1
= "abc";

  node@0
{
    status
= "okay";
    new_prop2
= "xyz";
 
};
};
/dts-v1/;

/ {
  compatible
= "corp,foo";

 
...

  nodes
{
    linux
,phandle = <0x1>;
    phandle
= <0x1>;
    compatible
= "corp,bar";
    new_prop1
= "abc";

    node@0
{
      linux
,phandle = <0x2>;
      phandle
= <0x2>;
      status
= "okay";
      new_prop2
= "xyz";
   
};
 
};
};