ডিটিও সিনট্যাক্স

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

তথ্যসূত্র ব্যবহার করুন

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

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

কম্পাইলেশনের সময় উপস্থিত না থাকা নোডগুলির অনির্ধারিত রেফারেন্সের অনুমতি দেওয়ার জন্য, ওভারলে ডিটি ( .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 ওভারলে.ডিটিএস একীভূত ফলাফল
[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 ওভারলে.ডিটিএস একীভূত ফলাফল
[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 ওভারলে.ডিটিএস একীভূত ফলাফল
[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";
    };
  };
};