صور DTB

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

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

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

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

تنسيق صورة DTB

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

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

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

بما في ذلك صورة DTB في صورة التمهيد

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

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

هيكل صورة التمهيد

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

قسم صورة التمهيد عدد الصفحات
رأس التمهيد (صفحة واحدة) 1
النواة (صفحات لتر) ل = ( kernel_size + page_size - 1) / page_size
رامديسك (م صفحة) م = ( ramdisk_size + page_size - 1) / page_size
أداة تحميل التشغيل للمرحلة الثانية (عدد الصفحات) ن = ( second_size + page_size - 1) / page_size
استرداد DTBO (صفحات) o = ( recovery_dtbo_size + page_size - 1) / page_size
DTB (صفحات ص) ع = ( 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_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 kernel للإشارة إلى فهرس شجرة الجهاز المحددة (DT). يمكنك تحديد فهرس واحد (1) فقط. على سبيل المثال، تشير المعلمة androidboot.dtb_idx=N إلى N باعتباره الفهرس الصفري لشجرة الجهاز المحدد بواسطة أداة تحميل التشغيل من مجموعة DTBs الموجودة في صورة التمهيد.