بنية 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 الرئيسية:

تحديد التصنيفات في شجرة الأجهزة الرئيسية ... ... ثم استخدِم التصنيفات.
[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>;
};

إلغاء

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