التجميع والتحقق

يمكنك استخدام برنامج التحويل البرمجي لشجرة الجهاز (DTC) لتجميع مصدر الشجرة للجهاز (DTS) الملفات. ومع ذلك، قبل تطبيق شجرة الأجهزة المتراكبة على DT الرئيسي المستهدف، يجب التحقق أيضًا من النتيجة من خلال محاكاة سلوك تراكب شجرة الجهاز (DTO).

التجميع باستخدام DTC

عند استخدام dtc لتجميع .dts، يجب إضافة الخيار -@ لإضافة عقدة __symbols__ في النتيجة .dtbo. تحتوي العقدة __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 الرئيسي. قبل تعديل الهدف، يمكنك التحقّق من لتركيب DT على المضيف من خلال محاكاة سلوك DTO باستخدام /include/ في .dts.

الشكل 1. استخدام البنية /include/ لمحاكاة 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. استخدام "dtc" في التجميع my_main_dt_with_include.dts للحصول على DT المدمج، الذي ينبغي هي نفس نتيجة DTO. مثل:
    dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
    
  4. استخدِم dtc لتفريغ my_merged_dt.dto.
    dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
    

التحقّق من DTO في Android 9

يتطلب Android 9 ظهور تراكب الكائن الثنائي الكبير (blob) شجرة الجهاز (DTBO). لإضافة عُقد أو إجراء تغييرات على الخصائص في المنظومة على الرقاقة (SoC) DT، يجب أن يتراكب برنامج الإقلاع بشكل ديناميكي على جهاز DT خاص بالجهاز المنظومة على الرقاقة (SoC) DT.

الإشارة إلى التراكبات المطبَّقة

لتمكين حزمة اختبار المورّد (VTS) لتقييم مدى صحة المحتوى المركَّب التطبيق، على المورّدين إضافة مَعلمة سطر أوامر kernel جديدة. androidboot.dtbo_idx التي تشير إلى التراكبات المحددة من قسم DTBO. في Android 12 باستخدام إصدار النواة (النواة) 5.10 أو أكبر، تمر هذه المعلمة عبر ملف Bootconfig. على سبيل المثال، تُبلغ المعلمة androidboot.dtbo_idx=x,y,z x وy وz كمؤشرات قائمة على صفر يشير إلى أنّ منظمات الاتّجار بالمخدرات من قسم DTBO المطبَّق (بهذا الترتيب). بواسطة برنامج الإقلاع إلى أداة DT الأساسية.

ويمكن تطبيق التراكبات على العُقد من DT الرئيسي أو إضافة عقد جديدة، ولكن لا يمكن أن يشير إلى عقدة تمت إضافتها في تراكب سابق. هذا النمط فالقيد ضروريًا لأن التطبيق الذي يظهر على سطح الفيديو لا يدمج جدول رموز التراكب مع جدول رموز DT الرئيسي (لا يؤدي الدمج إلى تجنب التعارضات في أسماء الرموز وتعقيد التبعيات بين التراكبات).

مثال: التراكبات غير الصالحة

في هذا المثال، تشير overlay_2.dts إلى العقدة. e، الذي تمت إضافته بواسطة overlay_1.dts بعد تطبيق overlay_1 على DT الرئيسي، في حال محاولة تطبيق overlay_2 على DT الناتج، يخفق تطبيق التراكب مع ظهور خطأ يفيد أن العلامة e غير موجودة في جدول الرموز قاعدة DT.

رئيسي.dts مركّب_1.dts تراكب_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 إلى العقدة فقط. b من خدمة DTS الرئيسية. فعندما يتم تطبيق overlay_1 على DT الأساسي، ثم متبوعًا تطبيق لـ overlay_2، قيمة الخاصية prop في العقدة e (المحددة بواسطة overlay_1.dts) يتم استبدالها بالقيمة التي تحددها overlay_2.dts

رئيسي.dts مركّب_1.dts تراكب_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 التي طبّقتها على قاعدة البيانات (DT) الأساسية (في هذه الحالة الترتيب).
    • يجب أن تشير الفهارس إلى موضع التراكب في مؤشر DTBO قسم القرص.

لمعرفة تفاصيل عن بنية قسم DTBO، يمكنك الاطّلاع على مقالة تراكبات شجرة الجهاز.

التحقّق من صحة قسم DTBO

يمكنك استخدام ميزة VTS للتحقّق مما يلي:

  • توفُّر معلمة سطر أوامر kernel 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 في الفهرس 3 تراكب DT في الفهرس 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>;
		prod = <0xfe>;
	};

	__الرموز__ {
		a = "/a";
		b = "/b";
		c = "/c";
	};
};