يمكن أن تتضمّن عمليات تنفيذ Android صورة Device Tree Blob (DTB) ليستخدمها برنامج التشغيل. يختلف موقع صورة DTB (وخيارات تحديد مَعلمات صورة DTB) بين إصدارات Android.
في نظام التشغيل Android 11، يجب أن تتوافق الأجهزة التي تستخدم صورة النواة العامة (GKI) مع قسم vendor boot الذي يتضمّن جميع المعلومات الخاصة بالمورِّد والتي تم نقلها من قسم boot. بما أنّ صورة DTB تحتوي على بيانات خاصة بالمورّد، أصبحت الآن جزءًا من قسم التشغيل الخاص بالمورّد. لتحديد مَعلمات صورة DTB، يُرجى الاطّلاع على عنوان قسم التشغيل الخاص بالمورّد.
في نظام التشغيل Android 10، يمكن أن تتضمّن الأجهزة صورة DTB في قسم التشغيل. لتحديد مَعلمات صورة DTB، راجِع تضمين صورة DTB في صورة التشغيل.
في الإصدار 9 من نظام التشغيل Android والإصدارات الأقدم، يمكن أن توجد صورة DTB في قسم خاص بها أو يمكن إلحاقها بنواة
image.gzلإنشاء صورة النواة + DTB (التي يتم تمريرها بعد ذلك إلىmkbootimgلإنشاءboot.img).
تنسيق صورة DTB
في نظام التشغيل Android 10 والإصدارات الأحدث، يجب أن تستخدم صورة DTB أحد التنسيقات التالية:
تتم إضافة وحدات DT الثنائية المتسلسلة الواحدة تلو الأخرى. يستخدم برنامج الإقلاع
totalsizeالحقل في كل عنوان FDT لقراءة وتحليل النقطة الثنائية المقابلة.أقسام DTB/DTBO: يوفّر برنامج الإقلاع طريقة فعّالة لاختيار ملف ثنائي كبير (BLOB) لشجرة أجهزة (DT) الصحيحة من خلال فحص بنية
dt_table_entry(التي تحتوي على الحقولidوrevوcustom) التي يمكنها الاحتفاظ بمعلومات تعريف الأجهزة للإدخال. لمزيد من التفاصيل، يُرجى الاطّلاع على أقسام DTB/DTBO.
تضمين صورة DTB في صورة التشغيل
يمكن للأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android تضمين صورة DTB في صورة التشغيل. ويؤدي ذلك إلى عدم الحاجة إلى أن يتيح نظام التشغيل Android النصوص البرمجية التي تضيف صورة DTB إلى image.gz في النواة، كما يتيح استخدام اختبار مجموعة اختبارات المورِّدين (VTS) للتحقّق من موضع DTB (وتوحيده).
بالإضافة إلى ذلك، بالنسبة إلى الأجهزة غير المتوافقة مع نظام التشغيل A/B، من الأفضل أن يكون DTB جزءًا من صورة استرداد الإعدادات الأصلية بدلاً من أن يكون في قسم منفصل لتجنُّب المشاكل الناتجة عن عمليات OTA التي تم إيقافها. أثناء التحديث عبر شبكة غير سلكية (OTA)، إذا حدثت مشكلة بعد تعديل قسم DTB (ولكن قبل إكمال التحديث الكامل)، سيحاول الجهاز التشغيل في وضع الاسترداد (Recovery mode) لإكمال التحديث عبر شبكة غير سلكية. ومع ذلك، بما أنّه تم تعديل قسم DTB، قد يحدث عدم تطابق مع صورة استرداد الإعدادات الأصلية (التي لم يتم تعديلها بعد). يؤدي تضمين صورة DTB كجزء من تنسيق صورة التشغيل إلى تجنُّب هذه المشاكل من خلال جعل صورة استرداد الإعدادات الأصلية مكتفية ذاتيًا (أي أنّها لا تعتمد على قسم آخر).
بنية صورة التشغيل
يمكن أن تتضمّن الأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android صورة DTB باستخدام بنية صورة التشغيل التالية.
| قسم صورة التشغيل | عدد الصفحات |
|---|---|
| عنوان التمهيد (صفحة واحدة) | 1 |
| Kernel (الصفحات التي تبدأ بالحرف l) | l = (kernel_size + page_size -
1) / page_size |
| Ramdisk (عدد الصفحات m) | m = (ramdisk_size + page_size -
1) / page_size |
| برنامج الإقلاع في المرحلة الثانية (عدد الصفحات) | n = (second_size + page_size -
1) / page_size |
| Recovery DTBO (o pages) | o = (recovery_dtbo_size + page_size -
1) / page_size |
| DTB (صفحات p) | p = (dtb_size + page_size -
1) / page_size |
مسار صورة DTB
بالنسبة إلى الأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android، يمكنك استخدام أداة mkbootimg.py والوسيطات التالية لتحديد مسار صورة DTB.
| الوسيطة | الوصف |
|---|---|
dtb |
مسار صورة DTB التي سيتم تضمينها في صور التشغيل/الاسترداد |
dtb_offset |
عند إضافته إلى الوسيط base، يوفّر عنوان التحميل الفعلي لشجرة الأجهزة النهائية. على سبيل المثال، إذا كانت قيمة الوسيطة base هي 0x10000000 وقيمة الوسيطة dtb_offset هي 0x01000000، سيتم ملء dtb_addr_field في عنوان صورة التشغيل بالقيمة 0x11000000. |
يجب استخدام متغيّر إعدادات اللوحة BOARD_PREBUILT_DTBIMAGE_DIR لتحديد مسار صورة DTB. إذا كان هناك أكثر من ملف واحد بالامتداد *.dtb في الدليل BOARD_PREBUILT_DTBIMAGE_DIR، يربط نظام إنشاء Android الملفات لإنشاء صورة DTB النهائية المستخدَمة في إنشاء صورة التمهيد.
لتمرير الوسيطة dtb إلى mkbootimg.py باستخدام صورة DTB من الدليل المحدّد بواسطة BOARD_PREBUILT_DTBIMAGE_DIR، يجب ضبط متغيّر إعدادات اللوحة BOARD_INCLUDE_DTB_IN_BOOTIMG على true. على سبيل المثال:
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
يمكنك إلحاق الوسيطة dtb_offset بالمتغيّر BOARD_MKBOOTIMG_ARGS board
config مع الإزاحات الأخرى وإصدار العنوان. على سبيل المثال:
BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --dtb_offset $(BOARD_DTB_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
توافُق برنامج الإقلاع
لكي يتم تشغيل VTS بنجاح على الأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android، يجب أن يتيح برنامج الإقلاع تحديث صورة التشغيل، ويجب إضافة المَعلمة androidboot.dtb_idx إلى سطر أوامر النواة للإشارة إلى فهرس شجرة الأجهزة (DT) المحدّدة. يمكنك تحديد فهرس واحد فقط. على سبيل المثال، تعرض المَعلمة androidboot.dtb_idx=N القيمة N كفهرس يبدأ من الصفر لشجرة الأجهزة التي يختارها برنامج الإقلاع من مجموعة جداول وصف الأجهزة (DTB) المتوفّرة في صورة التشغيل.