DTO সিনট্যাক্স

ডিভাইস ট্রি সোর্স (DTS) ফর্ম্যাট হল ডিভাইস ট্রি (DT)-এর টেক্সট ভিত্তিক উপস্থাপনা। ডিভাইস ট্রি কম্পাইলার (DTC) এই ফর্ম্যাটকে বাইনারি DT-তে প্রসেস করে, যা Linux কার্নেলের জন্য উপযুক্ত ফর্ম।

রেফারেন্স ব্যবহার করা

DTC (ডিভাইস ট্রি কম্পাইলার + ওভারলে প্যাচ) প্রজেক্টটি dtc-format.txt ও manual.txt-এ DTS ফর্ম্যাট বর্ণনা করে। DTO ফর্ম্যাট ও নিয়ম dt-object-internal.txt-এ বর্ণনা করা আছে। এইসব ডকুমেন্টে বর্ণনা করা হয়েছে যে কীভাবে ওভারলে DT-তে node 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 এই সিনট্যাক্টিক সুগার সাপোর্ট না করলে, AOSP-তে dtc ব্যবহার করুন।

লেবেল ব্যবহার করা

কম্পাইলেশন টাইমে উপস্থিত নেই এমন নোডের জন্য অনির্দিষ্ট রেফারেন্সের অনুমতি দিতে, ওভারলে DT .dts ফাইলে অবশ্যই এর হেডারে একটি ট্যাগ /plugin/ থাকতে হবে। যেমন:

/dts-v1/;
/plugin/;

এখান থেকে আপনি রেফারেন্স ব্যবহার করে ওভারলে করার জন্য নোড টার্গেট করতে পারবেন, যা হল একটি অ্যাবসোলিউট নোড পাথ যার আগে একটি অ্যামপারস্যান্ড (&) থাকে। উদাহরণস্বরূপ, প্রধান DT-তে 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-এর পরে সেটি ওভাররাইড করা হয় ; অন্যথায়, সেটি যোগ করা হয়। যেমন:

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";
    };
  };
};