يمكنك استخدام برنامج تجميع شجرة الأجهزة (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 على المضيف
يمكن أن تساعدك عملية التحقّق في تحديد الأخطاء التي قد تحدث عند وضع جدول بيانات التراكب على جدول البيانات الرئيسي. قبل تعديل الهدف، يمكنك التحقّق من نتيجة تراكب 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
للحصول على جدول البيانات المدمج، والذي يجب أن يكون النتيجة نفسها التي تم الحصول عليها من 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)، يجب أن يفرض برنامج التحميل طبقة ديناميكية من شجرة وصف الجهاز الخاصة بالجهاز على شجرة وصف الجهاز الخاصة بنظام على شريحة.
الإشارة إلى العناصر المركّبة التي تم تطبيقها
لتمكين
مجموعة اختبارات المورّدين (VTS) من تقييم صحة تطبيق
التراكب، على المورّدين إضافة مَعلمة جديدة لسطر أوامر النواة
androidboot.dtbo_idx
تشير إلى التراكبات المحدّدة من
قسم DTBO. في نظام التشغيل Android 12 الذي يستخدم الإصدار 5.10 أو إصدارًا أحدث من النواة، يتم تمرير هذه المَعلمة من خلال bootconfig.
على سبيل المثال، تعرض المَعلمة androidboot.dtbo_idx=x,y,z
القيم x
وy
وz
كفهارس مستندة إلى الصفر لوحدات نقل البيانات (DTO) من قسم DTBO الذي تم تطبيقه (بهذا الترتيب) بواسطة برنامج التشغيل على شجرة الأجهزة الأساسية.
يمكن أن تنطبق الطبقات المتراكبة على العُقد من شجرة الأجهزة الرئيسية أو أن تضيف عُقدًا جديدة، ولكن لا يمكنها الإشارة إلى عقدة تمت إضافتها في طبقة متراكبة سابقة. هذا القيد ضروري لأنّ تطبيق التراكب لا يدمج جدول رموز التراكب مع جدول رموز 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
إلى سطر أوامر النواة.- يجب أن تشير المَعلمة إلى الفهارس المستندة إلى الصفر الخاصة بكائنات نقل البيانات (DTO) من صورة قسم DTBO التي تم تطبيقها على DT الأساسي (بالترتيب نفسه).
- يجب أن تشير الفهارس إلى موضع التراكب في قسم DTBO.
للحصول على تفاصيل حول بنية قسم DTBO، يُرجى الرجوع إلى تراكبات شجرة الأجهزة.
التحقّق من صحة قسم DTBO
يمكنك استخدام VTS للتحقّق من ما يلي:
- وجود مَعلمة سطر أوامر النواة
androidboot.dtbo_idx
(من خلال التأكّد من أنّInit
قد أعدّ تلقائيًا خاصية نظامro.boot.dtbo_idx
المقابلة). - صلاحية سمة نظام
ro.boot.dtbo_idx
(من خلال التأكّد من أنّ السمة تحدّد فهرس صورة DTBO صالحًا واحدًا على الأقل) - صلاحية قسم DTBO (يتحقّق أيضًا من التراكبات في قسم DTBO التي يتم تطبيقها على شجرة الأجهزة الأساسية)
- يتم عرض العُقد الإضافية أو تغييرات السمات في شجرة الأجهزة الناتجة لنواة 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>; prop = <0xfe>; }; __symbols__ { a = "/a"; b = "/b"; c = "/c"; }; }; |