تصاویر DTB

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

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

  • در Android 10، دستگاه‌ها می‌توانند تصویر DTB را در پارتیشن بوت قرار دهند. برای مشخص کردن پارامترهای تصویر DTB، به افزودن تصویر DTB به تصویر راه‌اندازی مراجعه کنید.

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

قالب تصویر DTB

در Android 10 و نسخه‌های بالاتر، تصویر DTB باید از یکی از قالب‌های زیر استفاده کند:

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

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

تصویر DTB را در تصویر راه‌اندازی بگنجانید

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

علاوه‌براین، برای دستگاه‌های غیر A/B، بهتر است DTB به‌عنوان بخشی از تصویر بازیابی باشد تا در پارتیشن جداگانه، تا از مشکلات ناشی از OTAهای قطع‌شده جلوگیری شود. درطول «به‌روزرسانی ازطریق شبکه»، اگر پس‌از به‌روزرسانی پارتیشن DTB (اما قبل‌از تکمیل به‌روزرسانی کامل) مشکلی پیش بیاید، دستگاه سعی می‌کند در حالت بازیابی راه‌اندازی شود تا «به‌روزرسانی ازطریق شبکه» را تکمیل کند؛ بااین‌حال، ازآنجایی‌که پارتیشن DTB قبلاً به‌روزرسانی شده است، ممکن است با تصویر بازیابی (که هنوز به‌روزرسانی نشده است) مطابقت نداشته باشد. داشتن تصویر DTB به‌عنوان بخشی از قالب تصویر راه‌اندازی با خودکفا کردن تصویر بازیابی (یعنی وابسته به پارتیشن دیگری نباشد) از بروز چنین مشکلاتی جلوگیری می‌کند.

ساختار تصویر راه‌اندازی

دستگاه‌هایی که Android 10 را اجرا می‌کنند می‌توانند بااستفاده از ساختار تصویر راه‌اندازی زیر، تصویر DTB داشته باشند.

بخش تصویر راه‌اندازی تعداد صفحه‌ها
سرصفحه راه‌اندازی (۱ صفحه) 1
هسته (۱ صفحه) ‫l = (kernel_size + page_size - ۱) / page_size
Ramdisk (m صفحه) ‫m = (ramdisk_size + page_size - 1) / page_size
راه‌انداز سیستم مرحله دوم (n صفحه) ‫n = (second_size + page_size - ۱) / 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 تکمیل می‌شود.

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