কম্পাইল ও যাচাই করা

ডিভাইস ট্রি সোর্স (DTS) ফাইল কম্পাইল করার জন্য আপনি ডিভাইস ট্রি কম্পাইলার (DTC) ব্যবহার করতে পারেন। তবে, টার্গেট মূল DT-তে ওভারলে ডিভাইস ট্রি (DT) প্রয়োগ করার আগে, আপনাকে ডিভাইস ট্রি ওভারলে (DTO)-এর আচরণ সিমুলেট করে ফলাফল যাচাই করতে হবে।

DTC-এর সাথে কম্পাইল করুন

.dts কম্পাইল করার জন্য dtc ব্যবহার করার সময়, আপনাকে অবশ্যই .dtbo-এ __symbols__ নোড যোগ করার জন্য -@ বিকল্প যোগ করতে হবে। __symbols__ নোডে লেবেল দিয়ে চিহ্নিত করা সব নোডের একটি তালিকা থাকে, যা DTO লাইব্রেরি রেফারেন্সের জন্য ব্যবহার করতে পারে।

প্রধান DT .dts তৈরি করার জন্য স্যাম্পেল কমান্ড:

dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts

ওভারলে DT .dts তৈরি করার জন্য নমুনা কমান্ড:

dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts

হোস্টে DTO ফলাফল যাচাই করা

মূল DT-তে ওভারলে DT প্লেস করার সময় হতে পারে এমন সমস্যা শনাক্ত করতে যাচাইকরণ সাহায্য করতে পারে। টার্গেট আপডেট করার আগে, আপনি .dts-এ /include/ ব্যবহার করে DTO-এর আচরণ সিমুলেট করার মাধ্যমে হোস্টে DT ওভারলে করার ফলাফল যাচাই করতে পারেন।

ছবি ১. হোস্টে DTO সিমুলেট করতে /include/ সিনট্যাক্স ব্যবহার করুন।

  1. ওভারলে .dts-এর একটি কপি তৈরি করুন। কপি থেকে, প্রথম লাইনের হেডার সরিয়ে দিন। উদাহরণ:
    /dts-v1/;
    /plugin/;
    
    ফাইলটি my_overlay_dt_wo_header.dts হিসেবে সেভ করুন (অথবা আপনি যে নামে চান)।
  2. মূল .dts-এর একটি কপি তৈরি করুন। কপিতে, শেষ লাইনের পরে, ১ নম্বর ধাপে আপনার তৈরি করা ফাইলের জন্য সিনট্যাক্স যোগ করুন। যেমন:
    /include/ "my_overlay_dt_wo_header.dts"
    
    ফাইলটি my_main_dt_with_include.dts হিসেবে সেভ করুন (অথবা আপনি যে নামে চান)।
  3. মার্জ করা DT পেতে dtc কম্পাইল করুন my_main_dt_with_include.dts, যা DTO-এর মতো একই ফলাফল দেবে। যেমন:
    dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
    
  4. my_merged_dt.dto ডাম্প করতে dtc ব্যবহার করুন।
    dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
    

Android 9-এ DTO যাচাই করা

Android 9-এর জন্য ডিভাইস ট্রি ব্লব ওভারলে (DTBO) পার্টিশন প্রয়োজন। SoC DT-তে নোড যোগ করতে বা প্রপার্টিতে পরিবর্তন করতে, বুটলোডারকে অবশ্যই SoC DT-র উপরে ডিভাইস নির্দিষ্ট DT ডায়নামিক ওভারলে করতে হবে।

প্রয়োগ করা ওভারলে সম্পর্কে ইঙ্গিত দেওয়া

ওভারলে অ্যাপের সঠিকতা মূল্যায়ন করতে ভেন্ডর টেস্ট স্যুট (VTS) চালু করতে, ভেন্ডরদের অবশ্যই একটি নতুন কার্নেল কমান্ড লাইন প্যারামিটার androidboot.dtbo_idx যোগ করতে হবে যা DTBO পার্টিশন থেকে বেছে নেওয়া ওভারলে নির্দেশ করে। Android 12-এ কার্নেল ভার্সন 5.10 বা তার পরের ভার্সন ব্যবহার করলে, এই প্যারামিটার bootconfig-এর মাধ্যমে পাস হয়। যেমন, androidboot.dtbo_idx=x,y,z প্যারামিটার x, y এবং z-কে বেস DT-তে বুটলোডার দ্বারা (সেই ক্রমে) প্রয়োগ করা DTBO পার্টিশন থেকে DTO-এর জিরো-বেসড ইনডেক্স হিসাবে রিপোর্ট করে।

ওভারলে মূল DT থেকে নোডে প্রয়োগ করা যেতে পারে বা নতুন নোড যোগ করা যেতে পারে, কিন্তু আগের ওভারলেতে যোগ করা নোডকে উল্লেখ করতে পারে না। এই বিধিনিষেধটি প্রয়োজনীয় কারণ ওভারলে অ্যাপটি মূল DT সিম্বল টেবিলের সাথে ওভারলে সিম্বল টেবিল মার্জ করে না (মার্জ না করলে সিম্বলের নামে কোনও বিরোধ হয় না এবং ওভারলেগুলির মধ্যে ডিপেন্ডেন্সি জটিল হয় না)।

উদাহরণ: ভুল ওভারলে

এই উদাহরণে, overlay_2.dts নোড e-কে বোঝায় , যেটি overlay_1.dts-এর মাধ্যমে যোগ করা হয়েছে। মূল DT-তে overlay_1 প্রয়োগ করার পরে, প্রয়োগ করা DT-তে overlay_2 প্রয়োগ করার চেষ্টা করা হলে, ওভারলে অ্যাপটি এই সমস্যার মেসেজ সহ ব্যর্থ হয় যে, বেস DT-র সিম্বল টেবিলে e সিম্বলটি নেই।

main.dts overlay_1.dts overlay_2.dts
[main.dts]

/dts-v1/;

/ {
  a: a {};
  b: b {};
  c: c {};
};
[overlay_1.dts]

/dts-v1/;
/plugin/;

&b { ref1 =  <&a>;
    e: e {
        prop = <0x0a>;
        phandle = <0x04>;
    };
};
[overlay_2.dts]

/dts-v1/;
/plugin/;

/* invalid! */
&e {
    prop = <0x0b>;
};

উদাহরণ: বৈধ ওভারলে

এই উদাহরণে, overlay_2.dts শুধুমাত্র মূল DTS থেকে node b-কে বোঝায়। যখন overlay_1 বেস DT-তে প্রয়োগ করা হয়, তারপর overlay_2-এর অ্যাপ প্রয়োগ করা হয়, তখন নোড e-এ প্রপার্টির ভ্যালু prop (overlay_1.dts-এর মাধ্যমে সেট করা) overlay_2.dts-এর মাধ্যমে সেট করা ভ্যালু দিয়ে ওভাররাইট করা হয়।

main.dts overlay_1.dts overlay_2.dts
[final.dts]

/dts-v1/;

/ {
  a: a {};
  b: b {};
  c: c {};
};
[overlay_1.dts]

/dts-v1/;
/plugin/;


&b { ref1 =  <&a>;
     e {
          prop = <0x0c>;
      };
};
[overlay_2.dts]

/dts-v1/;
/plugin/;

/* valid */
&b { ref1 =  <&c>;
     e {
          prop = <0x0d>;
      };
};

DTBO পার্টিশন প্রয়োগ করা

প্রয়োজনীয় DTBO পার্টিশন প্রয়োগ করতে, বুটলোডার নিম্নলিখিত কাজগুলি করতে পারে কিনা তা নিশ্চিত করুন:

  1. এটি কোন বোর্ডে চলছে তা শনাক্ত করুন এবং প্রয়োগ করার জন্য সংশ্লিষ্ট ওভারলে বেছে নিন।
  2. কার্নেল কমান্ড লাইনে androidboot.dtbo_idx প্যারামিটার যোগ করুন।
    • DTBO পার্টিশন ইমেজ থেকে DTO-এর শূন্য-ভিত্তিক ইন্ডেক্স প্যারামিটারকে অবশ্যই নির্দেশ করতে হবে যা বেস DT-তে প্রয়োগ করা হয়েছে (একই ক্রম অনুসারে)।
    • DTBO পার্টিশনে ওভারলেয়ের পজিশন ইনডেক্সকে অবশ্যই উল্লেখ করতে হবে।

DTBO পার্টিশনের স্ট্রাকচার সম্পর্কে বিস্তারিত জানতে, ডিভাইস ট্রি ওভারলে দেখুন।

DTBO পার্টিশন যাচাই করা

আপনি নিম্নলিখিত বিষয়গুলি যাচাই করতে VTS ব্যবহার করতে পারবেন:

  • কার্নেল কমান্ড লাইন প্যারামিটার androidboot.dtbo_idx-এর উপস্থিতি (Init অটোমেটিক সংশ্লিষ্ট ro.boot.dtbo_idx সিস্টেম প্রপার্টি সেট-আপ করেছে কিনা তা চেক করার মাধ্যমে)।
  • ro.boot.dtbo_idx সিস্টেম প্রপার্টির বৈধতা (প্রপার্টিটি অন্তত একটি বৈধ DTBO ইমেজ ইনডেক্স নির্দিষ্ট করে কিনা তা চেক করে)।
  • DTBO পার্টিশনের বৈধতা (এছাড়াও DTBO পার্টিশনে ওভারলে যাচাই করে যা বেস DT-তে প্রয়োগ করা হয়)।
  • ফলাফলস্বরূপ DT-তে অতিরিক্ত নোড বা প্রপার্টি পরিবর্তনগুলি Linux কার্নেলে উপস্থাপন করা হয়।

যেমন, নিম্নলিখিত ওভারলে ও ফাইনাল DT-তে, কার্নেল কমান্ড লাইনে androidboot.dtbo_idx=5,3 যোগ করলে যাচাইকরণ পাস করে যায়, কিন্তু কার্নেল কমান্ড লাইনে androidboot.dtbo_idx=3,5 যোগ করলে যাচাইকরণ পাস করে না।

ইনডেক্স ৩-এ ওভারলে DT ইনডেক্স ৫-এ ওভারলে DT
[overlay_1.dts]

/dts-v1/;
/plugin/;

&c { prop = <0xfe>; };
[overlay_2.dts]

/dts-v1/;
/plugin/;

&c { prop = <0xff>; };
Final DT

/dts-v1/;
/ {

	a {
		phandle = <0x1>;
	};

	b {
		phandle = <0x2>;
	};

	c {
		phandle = <0x3>;
		prop = <0xfe>;
	};

	__symbols__ {
		a = "/a";
		b = "/b";
		c = "/c";
	};
};