بنية DTO

تنسيق مصدر شجرة الأجهزة (DTS) هو تمثيل نصي لشجرة الأجهزة (DT). يعالج برنامج ترجمة شجرة الأجهزة (DTC) هذا التنسيق إلى شجرة أجهزة ثنائية، وهو الشكل الذي تتوقّعه نواة Linux.

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

يوضّح مشروع DTC (برنامج تجميع شجرة الأجهزة + تصحيحات التراكب) تنسيق DTS في dtc-format.txt وmanual.txt. يتم وصف تنسيق DTO وقواعده في الملف dt-object-internal.txt. توضّح هذه المستندات كيفية تعديل جدول بيانات رئيسي باستخدام العقدة fragment@x والبنية __overlay__ في جدول بيانات متراكب. على سبيل المثال:

/ {
  fragment@0 {
    target = <&some_node>;
      __overlay__ {
        some_prop = "okay";
        ...
      };
  };
};

ومع ذلك، تنصحك Google بشدة بعدم استخدام fragment@x وبنية __overlay__، واستخدام بنية المرجع بدلاً من ذلك. مثلاً:

&some_node {
  some_prop = "okay";
  ...
};

يتم تجميع بنية المرجع بواسطة dtc في الكائن نفسه كما هو موضح أعلاه باستخدام البنية __overlay__. لا يفرض بناء الجملة هذا عليك ترقيم الأجزاء، ما يتيح لك قراءة وكتابة DTS المتراكبة بسهولة. إذا كان dtc لا يتيح هذه الميزة، استخدِم dtc في AOSP.

استخدام التصنيفات

للسماح بالإشارات غير المحدّدة إلى العُقد غير المتوفّرة في وقت التجميع، يجب أن يحتوي ملف .dts overlay DT على علامة /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";
  };
};

إلحاق

إذا لم تكن سمة العنصر المستهدَف المرجعي متوفّرة في جدول البيانات الرئيسي، تتم إضافتها بعد 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";
    };
  };
};