תחביר DTO

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

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

פרויקט DTC (מהדר עץ התקן + תיקוני שכבת על) מתאר את פורמט DTS ב- dtc-format.txt ו- manual.txt . פורמט DTO וכללים מתוארים ב- dt-object-internal.txt . מסמכים אלה מתארים כיצד לעדכן את ה-DT הראשי באמצעות node fragment@x והתחביר __overlay__ ב-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";
    };
  };
};