ডিভাইস ট্রি সোর্স (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"; }; }; }; |