תחביר של DTO

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

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

בפרויקט DTC (Device Tree compiler + overlay patches) מתוארים הפורמטים של 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 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";
    };
  };
};