بناء الجملة DTO

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

تنسيق مصدر شجرة الجهاز (DTS) هو تمثيل نصي لشجرة الجهاز. يعالج برنامج Device Tree Compiler (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";
    };
  };
};