تصاویر DTB

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

،

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