صور DTB

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

  • في نظام التشغيل Android 11، يجب أن تتيح الأجهزة التي تستخدم صورة النواة العامة (GKI) استخدام قسم التمهيد الخاص بالمورِّد الذي يتضمّن جميع المعلومات الخاصة بالمورِّد والتي تم نقلها من قسم التمهيد. بما أنّ صورة DTB تحتوي على بيانات خاصة بالمورّد، أصبحت الآن جزءًا من قسم التمهيد الخاص بالمورّد. لتحديد مَعلَمات صور DTB، يمكنك الاطّلاع على تمهيد البائع .

  • في Android 10، يمكن أن تتضمّن الأجهزة صورة DTB في قسم التمهيد. لتحديد مَعلمات صور DTB، يمكنك الاطّلاع على تضمين نموذج DTB في صورة التشغيل

  • في الإصدار 9 من نظام التشغيل Android والإصدارات الأقدم، يمكن أن تكون صورة DTB متوفّرة في القسم الخاص بها أو يمكن إلحاقها بالنواة image.gz لإنشاء ملف boot.img (الذي يتم تمريره بعد ذلك إلى mkbootimg لإنشاء boot.img).

تنسيق صورة DTB

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

  • مجموعات DT متسلسلة واحدة تلو الأخرى يستخدم مشغّل الإقلاع حقل totalsize في كلّ عنوان FDT لقراءة العنصر المرتبط وتحليله.

  • أقسام DTB/DTBO: ويوفر برنامج الإقلاع طريقة فعالة لتحديد نقطة DT الصحيحة عن طريق فحص بنية dt_table_entry (تحتوي على id، rev وcustom) التي يمكن أن تحتوي على معلومات تعريف الأجهزة للنطاق المدخل. لمعرفة التفاصيل، يُرجى الاطّلاع على DTB/DTBO. الأقسام:

تضمين صورة DTB في صورة التشغيل

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

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

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

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

قسم صورة تشغيل الجهاز عدد الصفحات
عنوان التشغيل (صفحة واحدة) 1
النواة (الصفحات الطويلة) l = (kernel_size + page_size - 1) / page_size
Ramdisk (صفحات m) م = (ramdisk_size + page_size - 1) / page_size
برنامج الإقلاع من المرحلة الثانية (عدد الصفحات) n = (second_size + page_size - 1) / page_size
DTBO للاسترداد (صفحات) o = (recovery_dtbo_size + page_size - 1) / page_size
DTB (صفحات p) 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 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)

التوافق مع برنامج الإقلاع

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