نحو DTO

قالب منبع درخت دستگاه (DTS) یک نمایش متنی از درخت دستگاه (DT) است. کامپایلر درخت دستگاه (DTC) این قالب را به یک DT باینری پردازش می‌کند، که همان شکلی است که هسته لینوکس انتظار دارد.

از منابع استفاده کنید

پروژه DTC (کامپایلر درخت دستگاه + وصله‌های روی هم گذاری) فرمت DTS را در dtc-format.txt و manual.txt شرح می‌دهد. فرمت و قوانین DTO در dt-object-internal.txt شرح داده شده‌اند. این اسناد نحوه به‌روزرسانی DT اصلی با استفاده از node fragment@x و سینتکس __overlay__ در DT روی هم گذاری را شرح می‌دهند. به عنوان مثال:

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

با این حال، گوگل اکیداً توصیه می‌کند که 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 لغو می‌شود؛ در غیر این صورت، پیوست می‌شود. برای مثال:

فایل اصلی.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";
  };
};

ضمیمه کردن

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