تصاویر DTB

پیاده‌سازی‌های اندروید می‌توانند شامل یک تصویر درخت دستگاه (DTB) برای استفاده توسط بوت‌لودر باشند. محل تصویر DTB (و گزینه‌های تعیین پارامترهای تصویر DTB) بین نسخه‌های اندروید متفاوت است.

  • در اندروید ۱۱، دستگاه‌هایی که از تصویر هسته عمومی (GKI) استفاده می‌کنند، باید از پارتیشن بوت فروشنده پشتیبانی کنند، که شامل تمام اطلاعات خاص فروشنده است که از پارتیشن بوت جابجا شده‌اند. از آنجا که تصویر DTB حاوی داده‌های خاص فروشنده است، اکنون بخشی از پارتیشن بوت فروشنده است. برای تعیین پارامترهای تصویر DTB، به سربرگ بوت فروشنده مراجعه کنید.

  • در اندروید ۱۰، دستگاه‌ها می‌توانند تصویر DTB را در پارتیشن بوت قرار دهند. برای تعیین پارامترهای تصویر DTB، به بخش «گنجاندن تصویر DTB در تصویر بوت» مراجعه کنید.

  • در اندروید ۹ و پایین‌تر، تصویر DTB می‌تواند در پارتیشن مخصوص به خود وجود داشته باشد یا به فایل kernel image.gz اضافه شود تا تصویر kernel + DTB ایجاد شود (که سپس برای ایجاد boot.img به mkbootimg ارسال می‌شود).

فرمت تصویر DTB

در اندروید ۱۰ و بالاتر، تصویر DTB باید از یکی از فرمت‌های زیر استفاده کند:

  • حباب‌های DT یکی پس از دیگری به هم متصل می‌شوند. بوت‌لودر از فیلد totalsize در هر هدر FDT برای خواندن و تجزیه حباب مربوطه استفاده می‌کند.

  • پارتیشن‌های DTB/DTBO. بوت‌لودر با بررسی ساختار dt_table_entry (شامل id ، rev و فیلدهای custom ) که می‌تواند اطلاعات شناسایی سخت‌افزار را برای ورودی نگه دارد، روشی کارآمد برای انتخاب DT blob صحیح دارد. برای جزئیات بیشتر، به بخش پارتیشن‌های DTB/DTBO مراجعه کنید.

تصویر DTB را در تصویر بوت قرار دهید

دستگاه‌هایی که اندروید ۱۰ را اجرا می‌کنند می‌توانند تصویر DTB را در تصویر بوت قرار دهند. این امر نیاز اندروید به پشتیبانی از اسکریپت‌هایی که تصویر DTB را به image.gz در هسته اضافه می‌کنند را از بین می‌برد و استفاده از تست Vendor Test Suite (VTS) را برای تأیید (و استانداردسازی) قرارگیری DTB امکان‌پذیر می‌کند.

In addition, for non-A/B devices, it's safer to have the DTB as part of the recovery image rather than in a separate partition to prevent issues caused by interrupted OTAs. During an OTA, if a problem occurs after the DTB partition is updated (but prior to completing the full update), the device tries to boot into recovery mode to complete the OTA; however, because the DTB partition has already been updated, a mismatch could occur with the recovery image (which has not yet been updated). Having the DTB image as part of the boot image format prevents such issues by making the recovery image self sufficient (that is, it doesn't depend on another partition).

ساختار تصویر بوت

دستگاه‌هایی که اندروید ۱۰ را اجرا می‌کنند می‌توانند با استفاده از ساختار بوت ایمیج زیر، یک ایمیج DTB را در خود جای دهند.

بخش تصویر بوت تعداد صفحات
هدر بوت (۱ صفحه) ۱
هسته (l صفحه) l = ( kernel_size + page_size - ۱) / page_size
رم‌دیسک (m صفحه) m = ( ramdisk_size + page_size - ۱) / page_size
بوت لودر مرحله دوم (n صفحه) n = ( second_size + page_size - ۱) / page_size
بازیابی DTBO (صفحات o) o = ( recovery_dtbo_size + page_size - ۱) / page_size
DTB (صفحه‌ها) p = ( dtb_size + page_size - ۱) / page_size

مسیر تصویر DTB

برای دستگاه‌هایی که اندروید ۱۰ را اجرا می‌کنند، می‌توانید از ابزار 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 وجود داشته باشد، سیستم ساخت اندروید فایل‌ها را به هم متصل می‌کند تا تصویر 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 با موفقیت روی دستگاه‌هایی که اندروید 10 را اجرا می‌کنند اجرا شود، بوت‌لودر باید از تصویر بوت به‌روزرسانی‌شده پشتیبانی کند و باید پارامتر خط فرمان هسته androidboot.dtb_idx را برای نشان دادن شاخص درخت دستگاه انتخاب‌شده (DT) اضافه کند. شما می‌توانید فقط یک (1) شاخص را مشخص کنید. به عنوان مثال، پارامتر androidboot.dtb_idx=N N را به عنوان شاخص مبتنی بر صفر درخت دستگاه انتخاب‌شده توسط بوت‌لودر از مجموعه DTBهای موجود در تصویر بوت گزارش می‌دهد.