يمكنك استخدام Device Tree Compiler (DTC) لترجمة ملفات مصدر شجرة الجهاز. ومع ذلك ، قبل تطبيق DT المتراكب على DT الرئيسي المستهدف ، يجب عليك أيضًا التحقق من النتيجة عن طريق محاكاة سلوك DTO.
تجميع مع DTC
عند استخدام dtc لترجمة .dts
، يجب إضافة الخيار -@
لإضافة عقدة dtc
في __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/
in .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
(أو أي اسم ملف تريده). - استخدم
my_main_dt_with_include.dts
dtc
على DT المدمج ، والذي يجب أن يكون نفس نتيجة DTO. على سبيل المثال:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
- استخدم
my_merged_dt.dto
dtc
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.
تشير إلى التراكبات المطبقة
لتمكين Vendor Test Suite (VTS) من تقييم صحة تطبيق التراكب ، يجب على البائعين إضافة معلمة سطر أوامر kernel جديدة androidboot.dtbo_idx
تشير إلى التراكبات المحددة من قسم DTBO. في Android 12 باستخدام إصدار kernel 5.10 أو إصدار أحدث ، تمر هذه المعلمة عبر 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 | تراكب_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
، يتم استبدال قيمة خاصية الخاصية في العقدة e
(المحددة بواسطة prop
) overlay_1.dts
المحددة بواسطة overlay_2.dts
.
main.dts | overlay_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
أوامر kernel.- يجب أن تشير المعلمة إلى المؤشرات الصفرية لـ DTOs من صورة قسم DTBO التي طبقتها على DT الأساسي (بنفس الترتيب).
- يجب أن تشير المؤشرات إلى موضع التراكب في قسم DTBO.
للحصول على تفاصيل حول بنية قسم DTBO ، ارجع إلى Device Tree Overlays على 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>; }; |
نهائي DT |
---|
/dts-v1/; / { a { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; prop = <0xfe>; }; __symbols__ { a = "/a"; b = "/b"; c = "/c"; }; }; |
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
Last updated 2022-09-07 UTC.