بناء الجملة DTO

يعد تنسيق مصدر شجرة الأجهزة (DTS) تمثيلاً نصيًا لشجرة الأجهزة. يقوم مترجم شجرة الأجهزة (DTC) بمعالجة هذا التنسيق في شجرة الأجهزة الثنائية، وهو النموذج المتوقع بواسطة Linux kernel.

باستخدام المراجع

يصف مشروع 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";
    };
  };
};