صور 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

بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 10، يمكنك استخدام أداة 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 المتوفّرة في صورة التشغيل.