صور DTB

يمكن أن تتضمّن عمليات تنفيذ Android صورة ملف بيانات جهاز (DTB) لاستخدامها في مشغِّل الإقلاع. يختلف موقع صورة DTB (وخيارات تحديد مَعلمات صورة DTB) بين إصدارات Android.

  • في نظام التشغيل Android 11، يجب أن تتوافق الأجهزة التي تستخدم صورة النواة العامة (GKI) مع قسم التمهيد الخاص بالمورِّد، الذي يتضمّن جميع المعلومات الخاصة بالمورِّد التي تم نقلها من قسم التمهيد. بما أنّ صورة 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_table_entry (التي تحتوي على حقول id وrev وcustom) التي يمكنها تخزين معلومات تحديد الأجهزة للإدخال. لمعرفة التفاصيل، يُرجى الاطّلاع على الأقسام DTB/DTBO.

تضمين صورة DTB في صورة التمهيد

يمكن أن تتضمّن الأجهزة التي تعمل بنظام التشغيل Android 10 صورة DTB في صورة التمهيد. ويؤدي ذلك إلى عدم الحاجة إلى أن يتيح نظام التشغيل Android النصوص البرمجية التي تُلحق صورة DTB بـ image.gz في النواة، ويسمح باستخدام اختبار مجموعة اختبارات (VTS) لدى المورّدين للتحقّق من موضع DTB (ووضع معايير له).

بالإضافة إلى ذلك، بالنسبة إلى الأجهزة غير المزوّدة بميزة A/B، من الأفضل أن يكون جدول بيانات التمهيد جزءًا من صورة الاسترداد بدلاً من أن يكون في قسم منفصل لتجنّب المشاكل الناتجة عن عمليات التحديث عبر الهواء المتوقفة. أثناء الاستخدام عبر الهواء، في حال حدوث مشكلة بعد تحديث قسم DTB (ولكن قبل إكمال التحديث الكامل)، يحاول الجهاز بدء تشغيل وضع الاسترداد لإكمال الإجراء عبر الهواء؛ ومع ذلك، بسبب تحديث قسم DTB بالفعل، قد يحدث عدم تطابق مع صورة الاسترداد (التي لم يتم تحديثها بعد). إنّ توفير صورة DTB كجزء من تنسيق صورة تمهيد يمنع حدوث هذه المشاكل من خلال جعل صورة الاسترداد كافية ذاتيًا (أي أنها لا تعتمد على قسم آخر).

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

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

قسم صورة التشغيل عدد الصفحات
عنوان التشغيل (صفحة واحدة) 1
النواة (الصفحات الطويلة) l = (kernel_size + page_size - 1) / page_size
ذاكرة الوصول العشوائي (m pages) m = (ramdisk_size + page_size - 1) / page_size
برنامج إقلاع المرحلة الثانية (n صفحة) n = (second_size + page_size - 1) / page_size
Recovery DTBO (o pages) o = (recovery_dtbo_size + page_size - 1) / page_size
DTB (p pages) 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 مع Offsets الأخرى وإصدار العنوان. مثلاً:

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)

دعم برنامج الإقلاع

لكي يتم تشغيل اختبار الأمان الافتراضي بنجاح على الأجهزة التي تعمل بنظام التشغيل Android 10، يجب أن يكون مُشغِّل الإقلاع متوافقًا مع صورة الإقلاع المعدَّلة ويجب إضافة مَعلمة سطر الأوامر androidboot.dtb_idx لنظام التشغيل لتحديد فهرس شجرة الجهاز المحدَّدة (DT). يمكنك تحديد فهرس واحد فقط (1). على سبيل المثال، تُبلغ المَعلمة androidboot.dtb_idx=N عن N على أنّه الفهرس المستند إلى الصفر لشجرة الجهاز التي اختارها مشغّل الإقلاع من مجموعة جداول DTB المتوفّرة في صورة الإقلاع.