תחביר 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";
    };
  };
};