پیادهسازیهای 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 موجود در تصویر بوت گزارش میکند.