يمكنك استخدام برنامج التحويل البرمجي لشجرة الجهاز (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 على المضيف.
- أنشئ نسخة من التراكب
.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
للحصول على 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 ظهور تراكب الكائن الثنائي الكبير (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 المطلوب، تأكَّد من أنّ برنامج الإقلاع يمكنه تنفيذ التالي:
- حدِّد اللوحة التي تعمل عليها تلك اللوحة واختَر اللوحة التراكبات التي سيتم تطبيقها.
- إلحاق المَعلمة
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"; }; }; |