صور DTB

يمكن أن تتضمّن عمليات تنفيذ Android صورة لملف ثنائي كبير لشجرة الأجهزة (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

في الإصدار 10 من نظام التشغيل Android والإصدارات الأحدث، يجب أن تستخدم صورة DTB أحد التنسيقات التالية:

  • تتم إضافة كتل DT الواحدة تلو الأخرى. يستخدم برنامج التحميل الحقل totalsize في كل رأس FDT لقراءة وتحليل النقطة الثنائية المقابلة.

  • أقسام DTB/DTBO: يوفّر برنامج التحميل طريقة فعّالة لاختيار حزمة 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 (ولكن قبل إكمال التحديث الكامل)، سيحاول الجهاز التشغيل في وضع الاسترداد لإكمال التحديث عبر شبكة غير سلكية. ومع ذلك، بما أنّه تم تعديل قسم DTB، قد يحدث عدم تطابق مع صورة الاسترداد (التي لم يتم تعديلها بعد). يؤدي تضمين صورة DTB كجزء من تنسيق صورة التمهيد إلى تجنُّب هذه المشاكل من خلال جعل صورة الاسترداد مكتفية ذاتيًا (أي أنّها لا تعتمد على قسم آخر).

بنية صورة التشغيل

يمكن أن تتضمّن الأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android صورة DTB باستخدام بنية صورة التشغيل التالية.

قسم "صورة التشغيل" عدد الصفحات
رأس التمهيد (صفحة واحدة) 1
النواة (ل صفحات) 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 بنجاح على الأجهزة التي تعمل بنظام التشغيل Android 10، يجب أن يتيح برنامج التحميل صورة التشغيل المعدَّلة، ويجب إضافة المَعلمة androidboot.dtb_idx لسطر أوامر النواة للإشارة إلى فهرس شجرة الأجهزة (DT) المحدّدة. يمكنك تحديد فهرس واحد فقط. على سبيل المثال، تعرض المَعلمة androidboot.dtb_idx=N القيمة N كفهرس يبدأ من الصفر لشجرة الأجهزة التي اختارها برنامج التحميل من مجموعة جداول وصف الأجهزة (DTB) المتوفّرة في صورة التشغيل.