نحو DTO

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

با استفاده از مراجع

پروژه 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 و syntax __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";
    };
  };
};