תחביר של DTO

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

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

בפרויקט 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 הראשי ... ... ואז משתמשים בתוויות.
[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 overlay.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 overlay.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 overlay.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";
    };
  };
};