پیادهسازیهای اندروید میتوانند شامل یک تصویر حباب درخت دستگاه (DTB) برای استفاده توسط بوتلودر باشند. مکان تصویر DTB (و گزینههای تعیین پارامترهای تصویر DTB) بین نسخههای اندروید متفاوت است.
در Android 11، دستگاههایی که از تصویر هسته عمومی (GKI) استفاده میکنند باید از پارتیشن راهاندازی فروشنده پشتیبانی کنند که شامل تمام اطلاعات خاص فروشنده است که از پارتیشن بوت منتقل شدهاند. از آنجایی که تصویر DTB حاوی داده های خاص فروشنده است، اکنون بخشی از پارتیشن بوت فروشنده است. برای تعیین پارامترهای تصویر DTB، به سربرگ راهاندازی فروشنده مراجعه کنید.
در اندروید 10، دستگاه ها می توانند تصویر DTB را در پارتیشن بوت قرار دهند. برای تعیین پارامترهای تصویر DTB، به گنجاندن تصویر DTB در تصویر بوت مراجعه کنید.
در اندروید 9 و پایینتر، تصویر DTB میتواند در پارتیشن خودش وجود داشته باشد یا به kernel
image.gz
اضافه شود تا هسته + تصویر DTB ایجاد شود (که سپس برای ایجادboot.img
بهmkbootimg
ارسال میشود).
فرمت تصویر DTB
در اندروید 10 و بالاتر، تصویر DTB باید از یکی از فرمت های زیر استفاده کند:
حباب های DT یکی پس از دیگری به هم پیوستند. بوت لودر از فیلد
totalsize
در هر هدر FDT برای خواندن و تجزیه لکه مربوطه استفاده می کند.پارتیشن های DTB/DTBO بوت لودر روشی کارآمد برای انتخاب حباب DT صحیح با بررسی ساختار
dt_table_entry
(شامل فیلدهایid
،rev
وcustom
) دارد که می تواند اطلاعات شناسایی سخت افزاری را برای ورودی نگه دارد. برای جزئیات، به پارتیشنهای DTB/DTBO مراجعه کنید.
تصویر DTB را در تصویر بوت قرار دهید
دستگاههای دارای اندروید 10 میتوانند تصویر DTB را در تصویر بوت قرار دهند. این نیاز اندروید را به پشتیبانی از اسکریپتهایی که تصویر DTB را به image.gz
در هسته اضافه میکنند، از بین میبرد و استفاده از تست مجموعه تست فروشنده (VTS) را برای تأیید (و استانداردسازی) قرار دادن DTB فعال میکند.
علاوه بر این، برای دستگاه های غیر A/B، ایمن تر است که DTB را به عنوان بخشی از تصویر بازیابی به جای یک پارتیشن جداگانه برای جلوگیری از مشکلات ناشی از OTA های قطع شده داشته باشید. در طول OTA، اگر پس از بهروزرسانی پارتیشن DTB (اما قبل از تکمیل بهروزرسانی کامل)، مشکلی رخ دهد، دستگاه سعی میکند برای تکمیل OTA به حالت بازیابی راهاندازی شود. با این حال، از آنجایی که پارتیشن DTB قبلاً به روز شده است، ممکن است یک عدم تطابق با تصویر بازیابی (که هنوز به روز نشده است) رخ دهد. داشتن تصویر DTB به عنوان بخشی از فرمت تصویر بوت، با خودکفایی کردن تصویر بازیابی (یعنی به پارتیشن دیگری وابسته نیست) از چنین مسائلی جلوگیری می کند.
ساختار تصویر بوت
دستگاههایی که Android 10 دارند میتوانند یک تصویر DTB با استفاده از ساختار تصویر بوت زیر داشته باشند.
بخش تصویر بوت | تعداد صفحات |
---|---|
هدر بوت (1 صفحه) | 1 |
هسته (l صفحه) | l = ( kernel_size + page_size - 1) / page_size |
Ramdisk (متر صفحه) | m = ( ramdisk_size + page_size - 1) / page_size |
بوت لودر مرحله دوم (n صفحه) | n = ( second_size + page_size - 1) / page_size |
DTBO بازیابی (o pages) | o = ( recovery_dtbo_size + page_size - 1) / page_size |
DTB (صفحه های ص) | p = ( dtb_size + page_size - 1) / page_size |
مسیر تصویر DTB
برای دستگاههایی که اندروید 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) اضافه کند. شما می توانید تنها یک (1) ایندکس را مشخص کنید. به عنوان مثال، پارامتر androidboot.dtb_idx=N
N
را به عنوان شاخص مبتنی بر صفر درخت دستگاه انتخاب شده توسط بوت لودر از مجموعه DTB های موجود در تصویر بوت گزارش می کند.