يمكنك استخدام أداة تجميع شجرة الأجهزة (DTC) لتجميع ملفات مصدر شجرة الأجهزة (DTS) ومع ذلك، قبل تطبيق شجرة الأجهزة (DT) المتراكبة على شجرة الأجهزة الرئيسية المستهدَفة، عليك أيضًا التحقّق من النتيجة من خلال محاكاة سلوك شجرة الأجهزة المتراكبة (DTO).
التجميع باستخدام أداة تجميع شجرة الأجهزة (DTC)
عند استخدام dtc لتجميع .dts، عليك إضافة
الخيار -@ لإضافة عقدة __symbols__ في الـ
ـ .dtbo الناتج. تحتوي العقدة __symbols__ على قائمة بجميع العُقد التي تم وضع علامة عليها باستخدام تصنيف، ويمكن لمكتبة شجرة الأجهزة المتراكبة (DTO) استخدامها كمرجع.
نموذج أمر لإنشاء ملف .dts لشجرة الأجهزة الرئيسية:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
نموذج أمر لإنشاء ملف .dts لشجرة الأجهزة المتراكبة:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
التحقّق من نتائج شجرة الأجهزة المتراكبة (DTO) على المضيف
يمكن أن يساعدك التحقّق في تحديد الأخطاء التي قد تحدث عند وضع
شجرة الأجهزة المتراكبة على شجرة الأجهزة الرئيسية. قبل تعديل الجهاز المستهدَف، يمكنك التحقّق من نتيجة تراكب شجرة الأجهزة على المضيف من خلال محاكاة سلوك شجرة الأجهزة المتراكبة (DTO) باستخدام /include/ في .dts.

الشكل 1: استخدِم البنية /include/ لمحاكاة شجرة الأجهزة المتراكبة (DTO) على المضيف.
- أنشِئ نسخة من ملف
.dtsالمتراكب. في النسخة، أزِل الـ رأس السطر الأول. مثال: احفظ الملف باسم/dts-v1/; /plugin/;
my_overlay_dt_wo_header.dts(أو أي اسم ملف تريده). - أنشِئ نسخة من ملف
.dtsالرئيسي. في النسخة، بعد السطر الأخير، ألحِق بنية التضمين للملف الذي أنشأته في الخطوة 1. على سبيل المثال: احفظ الملف باسم/include/ "my_overlay_dt_wo_header.dts"
my_main_dt_with_include.dts(أو أي اسم ملف تريده). - استخدِم
dtcلتجميعmy_main_dt_with_include.dtsللحصول على شجرة الأجهزة المدمَجة، التي يجب أن تكون النتيجة نفسها لشجرة الأجهزة المتراكبة (DTO). على سبيل المثال:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
- استخدِم
dtcلتفريغ ملفmy_merged_dt.dto.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
التحقّق من شجرة الأجهزة المتراكبة (DTO) في Android 9
يتطلّب Android 9 قسمًا متراكبًا من مجموعة بيانات شجرة الأجهزة (DTBO). لإضافة عُقد أو إجراء تغييرات على الخصائص في شجرة الأجهزة (DT) الخاصة بمنظومة على رقاقة (SoC)، يجب أن يراكب برنامج الإقلاع بشكل ديناميكي شجرة أجهزة خاصة بالجهاز على شجرة الأجهزة (DT) الخاصة بمنظومة على رقاقة (SoC).
الإشارة إلى التراكبات المطبَّقة
لتمكين
حزمة اختبارات المورِّد (VTS) من تقييم مدى صحة تطبيق التراكب
، على المورّدين إضافة مَعلمة جديدة لسطر أوامر النواة
androidboot.dtbo_idx تشير إلى التراكبات التي تم اختيارها من
قسم مجموعة بيانات شجرة الأجهزة (DTBO). في Android 12 باستخدام إصدار النواة
5.10 أو إصدار أحدث، يتم تمرير هذه المَعلمة من خلال bootconfig.
على سبيل المثال، تُبلغ المَعلمة androidboot.dtbo_idx=x,y,z عن
x وy وz كفهارس مستندة إلى الصفر لشجرة الأجهزة المتراكبة (DTO) من قسم مجموعة بيانات شجرة الأجهزة (DTBO) التي طبّقها برنامج الإقلاع على شجرة الأجهزة الأساسية (بهذا الترتيب).
يمكن أن تنطبق التراكبات على العُقد من شجرة الأجهزة الرئيسية أو تضيف عُقدًا جديدة، ولكن لا يمكنها الإشارة إلى عقدة تمت إضافتها في تراكب سابق. هذا القيد ضروري لأنّ تطبيق التراكب لا يدمج جدول رموز التراكب مع جدول رموز شجرة الأجهزة الرئيسية (عدم الدمج يتجنّب حدوث تعارضات في أسماء الرموز وتعارضات في التبعيات بين التراكبات).
مثال: تراكبات غير صالحة
في هذا المثال، يشير overlay_2.dts إلى العقدة
e ، التي تمت إضافتها بواسطة
overlay_1.dts. بعد تطبيق overlay_1 على
شجرة الأجهزة الرئيسية، إذا تمت محاولة تطبيق 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 إلى العقدة
b فقط من ملف `.dts` الرئيسي. عند تطبيق
overlay_1 على شجرة الأجهزة الأساسية، ثم تطبيق
overlay_2، يتم استبدال قيمة السمة
prop في العقدة e
(التي تم ضبطها بواسطة 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) المطلوب، تأكَّد من أنّ برنامج الإقلاع يمكنه إجراء ما يلي:
- تحديد اللوحة التي يتم تشغيلها عليها واختيار التراكبات المقابلة التي سيتم تطبيقها
- إلحاق المَعلمة
androidboot.dtbo_idxبسطر أوامر النواة- يجب أن تشير المَعلمة إلى الفهارس المستندة إلى الصفر لشجرة الأجهزة المتراكبة (DTO) من صورة قسم مجموعة بيانات شجرة الأجهزة (DTBO) التي تم تطبيقها على شجرة الأجهزة الأساسية (بالترتيب نفسه).
- يجب أن تشير الفهارس إلى موضع التراكب في قسم مجموعة بيانات شجرة الأجهزة (DTBO) .
للحصول على تفاصيل حول بنية قسم مجموعة بيانات شجرة الأجهزة (DTBO)، يُرجى الرجوع إلى التراكبات في شجرة الأجهزة.
التحقّق من قسم مجموعة بيانات شجرة الأجهزة (DTBO)
يمكنك استخدام حزمة اختبارات المورِّد (VTS) للتحقّق مما يلي:
- وجود مَعلمة سطر أوامر النواة
androidboot.dtbo_idx(من خلال التحقّق من أنّInitقد أعدّ تلقائيًا خاصية النظام المقابلةro.boot.dtbo_idxsystem property). - صلاحية خاصية النظام
ro.boot.dtbo_idx(من خلال التحقّق من أنّ الخاصية تحدّد فهرس صورة واحدة على الأقل من مجموعة بيانات شجرة الأجهزة (DTBO) صالحة) - صلاحية قسم مجموعة بيانات شجرة الأجهزة (DTBO) (يتحقّق أيضًا من التراكبات في قسم مجموعة بيانات شجرة الأجهزة (DTBO) التي يتم تطبيقها على شجرة الأجهزة الأساسية)
- يتم عرض العُقد الإضافية أو التغييرات في الخصائص في شجرة الأجهزة الناتجة على نواة Linux.
على سبيل المثال، في التراكبات وشجرة الأجهزة النهائية التالية، يؤدي إضافة
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";
};
};
|