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