بنية DTO

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

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

DTC (برنامج تجميع شجرة الجهاز + تصحيحات التراكب) يصف مشروع DTS تنسيق 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 الرئيسي:

تحديد التسميات في البيانات الوصفية الرئيسية ... ... ثم استخدم التسميات.
[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 وإلا فسيتم إلحاقه. مثلاً:

رئيسي.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";
  };
};

إلحاق

في حال عدم توفُّر خاصية الهدف المرجعي في قسم البيانات الرئيسي ملحق بعد DTO. مثلاً:

رئيسي.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";
  };
};

العُقد الثانوية

أمثلة على بنية العُقد الفرعية:

رئيسي.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";
    };
  };
};