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

يمكنك استخدام أداة تجميع شجرة الجهاز (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 على المضيف من خلال محاكاة سلوك DTO باستخدام /include/ في .dts.

الشكل 1: استخدِم البنية /include/ لمحاكاة DTO على المضيف.

  1. أنشئ نسخة من التراكب .dts. في النسخة، أزِل عنوان السطر الأول. مثال:
    /dts-v1/;
    /plugin/;
    
    احفظ الملف باسم my_overlay_dt_wo_header.dts (أو أي اسمملف تريده).
  2. أنشئ نسخة من .dts الرئيسية. في النسخة، بعد السطر الأخير، ألِح بنية include للملف الذي أنشأته في الخطوة 1. مثلاً:
    /include/ "my_overlay_dt_wo_header.dts"
    
    احفظ الملف باسم my_main_dt_with_include.dts (أو أي اسمملف تريده).
  3. استخدِم dtc لتجميع my_main_dt_with_include.dts للحصول على DT المدمَجة، والتي يجب أن تكون هي النتيجة نفسها التي تظهر في DTO. مثلاً:
    dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
    
  4. استخدِم dtc لتفريغ my_merged_dt.dto.
    dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
    

التحقّق من DTO في Android 9

يتطلب نظام التشغيل Android 9 قسمًا لوضع رمز بيانات الجهاز (DTBO). لإضافة عقد أو إجراء تغييرات على السمات في ملف بيانات التكوين لوحدة المعالجة المركزية (SoC)، يجب أن يتراكب أداة تحميل البرامج الثابتة بشكل ديناميكي مع ملف بيانات تكوين خاص بالجهاز فوق ملف بيانات التكوين لوحدة المعالجة المركزية (SoC).

الإشارة إلى التراكبات المطبَّقة

لتفعيل مجموعة اختبارات المورّدين (VTS) لتقييم صحة تطبيق التراكب ، على المورّدين إضافة مَعلمة جديدة لسطر أوامر kernel androidboot.dtbo_idx تشير إلى التراكبات التي تم اختيارها من قسم DTBO. في نظام التشغيل Android 12 الذي يستخدم الإصدار 5.10 من kernel أو إصدارًا أحدث، يتم تمرير هذه المَعلمة من خلال bootconfig. على سبيل المثال، تُبلغ المَعلمة androidboot.dtbo_idx=x,y,z عن x وy وz على أنّها الفواصل المستندة إلى الصفر لملف DTO من قسم DTBO الذي يطبّقه (بهذا الترتيب) مشغّل الإقلاع على ملف DT الأساسي.

يمكن تطبيق التراكبات على العقد من 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 المطلوب، تأكَّد من أنّ أداة تحميل البرامج الأساسية يمكنها تنفيذ ما يلي:

  1. حدِّد اللوحة التي يتم تشغيلها عليها واختَر التراكبات المقابلة التي سيتم تطبيقها.
  2. أضِف المَعلمة androidboot.dtbo_idx إلى سطر الأوامر kernel.
    • يجب أن تشير المَعلمة إلى الفواصل المستندة إلى الصفر لـ DTO من صورة قسم DTBO التي تم تطبيقها على DT الأساسي (بالترتيب نفسه).
    • يجب أن تشير الفهارس إلى موضع التراكب في قسم DTBO.

لمعرفة تفاصيل عن بنية قسم DTBO، يُرجى الرجوع إلى تراكبات شجرة الجهاز.

التحقّق من قسم DTBO

يمكنك استخدام ميزة "التحقّق من الفيديو" للتحقّق مما يلي:

  • توفُّر مَعلمة سطر أوامر kernel androidboot.dtbo_idx (من خلال التحقّق من أنّ Init قد أعدّ تلقائيًا سمة ro.boot.dtbo_idx system المقابلة)
  • صلاحية سمة نظام ro.boot.dtbo_idx (من خلال التحقّق من أنّ السمة تحدّد فهرسًا واحدًا صالحًا على الأقل لصورة DTBO ).
  • صلاحية قسم DTBO (يتحقق أيضًا من التراكبات في قسم DTBO التي يتم تطبيقها على DT الأساسي).
  • يتم عرض العقد الإضافية أو تغييرات السمات في DT الناتج على نواة Linux.

على سبيل المثال، في التراكبات التالية و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";‎
‎	};‎
};