يمكنك استخدام Device Tree Compiler (DTC) لتجميع ملفات مصدر شجرة الأجهزة. ومع ذلك، قبل تطبيق تراكب DT على 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
.
/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 قسم Device Tree Blob Overlay (DTBO). لإضافة عقد أو إجراء تغييرات على الخصائص في SoC DT، يجب أن يقوم أداة تحميل التشغيل بتراكب DT خاص بالجهاز ديناميكيًا فوق SoC DT.
مشيرا إلى التراكبات المطبقة
لتمكين مجموعة اختبار البائع (VTS) من تقييم صحة تطبيق التراكب، يجب على البائعين إضافة معلمة سطر أوامر kernel جديدة androidboot.dtbo_idx
التي تشير إلى التراكبات المحددة من قسم DTBO. في نظام التشغيل Android 12 الذي يستخدم إصدار kernel 5.10 أو أحدث، تمر هذه المعلمة عبر bootconfig. على سبيل المثال، تُبلغ المعلمة androidboot.dtbo_idx=x,y,z
عن x
و y
و z
كمؤشرات صفرية لتراكبات شجرة الأجهزة (DTOs) من قسم 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.- يجب أن تشير المعلمة إلى المؤشرات الصفرية لـ DTOs من صورة قسم DTBO التي تم تطبيقها على DT الأساسي (بنفس الترتيب).
- يجب أن تشير المؤشرات إلى موضع التراكب في قسم DTBO.
للحصول على تفاصيل حول بنية قسم DTBO، راجع تراكبات شجرة الأجهزة على source.android.com.
التحقق من صحة قسم DTBO
يمكنك استخدام VTS للتحقق مما يلي:
- وجود معلمة سطر أوامر kernel
androidboot.dtbo_idx
(من خلال التحقق من قيامInit
تلقائيًا بإعداد خاصية النظامro.boot.dtbo_idx
المقابلة). - صلاحية خاصية النظام
ro.boot.dtbo_idx
(من خلال التحقق من أن الخاصية تحدد فهرس صورة DTBO صالحًا واحدًا على الأقل). - صلاحية قسم DTBO (يتحقق أيضًا من التراكبات الموجودة في قسم DTBO والتي يتم تطبيقها على DT الأساسي).
- يتم تقديم العقد الإضافية أو تغييرات الخصائص في DT الناتج إلى Linux kernel.
على سبيل المثال، في التراكبات التالية و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"; }; }; |
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2024-04-29 (حسب التوقيت العالمي المتفَّق عليه)