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

আপনি ডিভাইস ট্রি সোর্স ফাইল কম্পাইল করতে ডিভাইস ট্রি কম্পাইলার (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 অনুকরণ করতে সিনট্যাক্স /include/ ব্যবহার করুন
  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 রিপোর্ট করে ডিভাইস ট্রি ওভারলে (DTOs) এর শূন্য-ভিত্তিক সূচক হিসাবে DTBO পার্টিশন থেকে (সেই ক্রমে) বুটলোডার দ্বারা বেসে প্রয়োগ করা হয়েছে। ডিভাইস ট্রি (ডিটি)।

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

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

এই উদাহরণে, overlay_2.dts নোড e বোঝায়, যা overlay_1.dts দ্বারা যোগ করা হয়েছিল। প্রধান DT-তে overlay_1 প্রয়োগ করার পরে, ফলাফল DT-তে overlay_2 প্রয়োগ করার চেষ্টা করা হলে, ওভারলে অ্যাপ্লিকেশনটি একটি ত্রুটির সাথে ব্যর্থ হবে যে 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 থেকে নোড b কে বোঝায়। যখন overlay_1 বেস ডিটিতে প্রয়োগ করা হয়, তারপরে overlay_2 প্রয়োগ করা হয়, তখন নোড e ( overlay_1.dts দ্বারা সেট করা) তে prop মান 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 পার্টিশনের গঠন সম্পর্কে বিশদ বিবরণের জন্য, source.android.com-এ ডিভাইস ট্রি ওভারলে দেখুন।

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