কম্পাইল এবং যাচাই

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

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 স্থাপন করার সময় যে ত্রুটিগুলি ঘটতে পারে তা সনাক্ত করতে সাহায্য করতে পারে। লক্ষ্য আপডেট করার আগে, আপনি /include/ in .dts ব্যবহার করে DTO-এর আচরণ অনুকরণ করে হোস্টে DT ওভারলে করার ফলাফল যাচাই করতে পারেন।

চিত্র 1. হোস্টে DTO অনুকরণ করতে সিনট্যাক্স /ইনক্লুড/ ব্যবহার করুন।

  1. ওভারলে .dts এর একটি অনুলিপি তৈরি করুন। অনুলিপিতে, প্রথম লাইনের শিরোনামটি সরান। উদাহরণ:
    /dts-v1/;
    /plugin/;
    
    ফাইলটিকে my_overlay_dt_wo_header.dts (অথবা আপনি চান এমন কোনো ফাইলের নাম) হিসাবে সংরক্ষণ করুন।
  2. প্রধান .dts এর একটি অনুলিপি তৈরি করুন। অনুলিপিতে, শেষ লাইনের পরে, ধাপ 1 এ আপনি যে ফাইলটি তৈরি করেছেন তার জন্য অন্তর্ভুক্ত সিনট্যাক্স যুক্ত করুন। উদাহরণস্বরূপ:
    /include/ "my_overlay_dt_wo_header.dts"
    
    ফাইলটিকে my_main_dt_with_include.dts (বা আপনি চান এমন কোনো ফাইলের নাম) হিসাবে সংরক্ষণ করুন।
  3. মার্জড ডিটি পেতে my_main_dt_with_include.dts কম্পাইল করতে dtc ব্যবহার করুন, যা 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 পার্টিশন থেকে নির্বাচিত ওভারলেগুলি নির্দেশ করে। অ্যান্ড্রয়েড 12-এ কার্নেল সংস্করণ 5.10 বা তার বেশি ব্যবহার করে, এই প্যারামিটারটি বুট কনফিগারেশনের মাধ্যমে যায়। উদাহরণস্বরূপ, androidboot.dtbo_idx=x,y,z প্যারামিটার x , y এবং z রিপোর্ট করে DTBO পার্টিশন থেকে DTO-এর শূন্য-ভিত্তিক সূচক হিসাবে বুটলোডার দ্বারা বেস DT-তে প্রয়োগ করা হয়েছে (সেই ক্রমে)।

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

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

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

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 থেকে নোড b কে বোঝায়। যখন overlay_1 বেস ডিটি-তে প্রয়োগ করা হয়, তারপর overlay_2 অ্যাপের পরে, নোড e ( overlay_1.dts দ্বারা সেট করা) তে prop মান ওভারলে_2 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-এ, কার্নেল কমান্ড লাইনে androidboot.dtbo_idx=5,3 যোগ করলে বৈধতা পাস হয় কিন্তু কার্নেল কমান্ড লাইনে androidboot.dtbo_idx=3,5 যোগ করলে বৈধতা পাস হয় না।

সূচক 3 এ ওভারলে ডিটি সূচক 5 এ ওভারলে ডিটি
[overlay_1.dts]

/dts-v1/;
/plugin/;

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

/dts-v1/;
/plugin/;

&c { prop = <0xff>; };
ফাইনাল ডিটি
/dts-v1/;
/ {

	a {
		phandle = <0x1>;
	};

	b {
		phandle = <0x2>;
	};

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

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