بنية DTO

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

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

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

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

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