يمكن أن تتضمن تطبيقات 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 الموجودة في صورة التمهيد.