تجميع والتحقق

يمكنك استخدام 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 .

الشكل 1. استخدم بناء الجملة /include/ لمحاكاة DTO على المضيف
  1. قم بإنشاء نسخة من التراكب .dts . في النسخة ، قم بإزالة رأس السطر الأول. مثال:
    /dts-v1/;
    /plugin/;
    
    احفظ الملف باسم my_overlay_dt_wo_header.dts (أو أي اسم ملف تريده).
  2. قم بإنشاء نسخة من .dts . الرئيسي. في النسخة ، بعد السطر الأخير ، قم بإلحاق بناء جملة التضمين للملف الذي قمت بإنشائه في الخطوة 1. على سبيل المثال:
    /include/ "my_overlay_dt_wo_header.dts"
    
    احفظ الملف كـ my_main_dt_with_include.dts (أو أي اسم ملف تريده).
  3. استخدم my_main_dt_with_include.dts dtc على DT المدمج ، والذي يجب أن يكون نفس نتيجة DTO. على سبيل المثال:
    dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
    
  4. استخدم 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 المطلوب ، تأكد من قيام أداة تحميل التشغيل بما يلي:

  1. حدد اللوحة التي تعمل عليها وحدد التراكب (التراكب) المقابل ليتم تطبيقها.
  2. قم بإلحاق المعلمة 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";
	};
};