نحو 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 استفاده کنید.

استفاده از برچسب‌ها

برای اجازه دادن به ارجاع‌های تعریف‌نشده به گره‌هایی که در زمان تدوین وجود ندارند، فایل 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";
    };
  };
};