در اندروید ۱۰ و بالاتر، تصویر سیستم عمومی (GSI) که برای اجرای تست انطباق CTS-on-GSI/VTS استفاده میشد، از userdebug به نوع ساخت کاربر تغییر کرد تا بتواند امضای انتشار داشته باشد. این یک مشکل برای تست VTS است زیرا VTS برای اجرا به adb root نیاز دارد، اما adb root در دستگاه ساخت کاربر در دسترس نیست.
دیباگ رمدیسک (یا دیباگ بوت ایمیج) برای فعال کردن دسترسی adb root روی دستگاه ساخت کاربر که بوت لودر آن آنلاک شده است، معرفی شده است. این امر با استفاده از همان system.img ساخت کاربر برای CTS-on-GSI و VTS-on-GSI، جریان آزمایش را ساده میکند. برای راهاندازی STS، استفاده از یک system.img دیگر از userdebug OEM همچنان مورد نیاز است.
جدول زیر تغییرات نوع تصویر و ساخت را برای آزمایش انطباق در اندروید ۱۰ نشان میدهد.
| مجموعه تست | تست با | ساختن | اشکالزدایی رمدیسک | ریشه adb؟ | تغییر نوع ساخت اندروید ۹ به ۱۰ |
|---|---|---|---|---|---|
| سی تی اس | سیستم OEM | کاربر | ن | ن | بدون تغییر |
| CTS-on-GSI | جی اس آی | کاربر | ن | ن | userdebug -> کاربر GSI انتشار امضا شد |
| اس تی اس | سیستم OEM | کاربرdebug | ن | ی | جدید در Q |
| وی تی اس | جی اس آی | کاربر | ی | ی | userdebug -> کاربر GSI انتشار امضا شد |
نمای کلی
این فایلهای تصویری اضافی در پوشهی ساخت ( ${ANDROID_PRODUCT_OUT} ) ایجاد میشوند:
-
boot-debug.img -
vendor_boot-debug.img
وقتی boot-debug.img روی پارتیشن boot دستگاه فلش میشود، نسخه userdebug از فایل system sepolicy و یک فایل property اضافی، adb_debug.prop ، بارگذاری میشوند. این به adb root اجازه میدهد تا با system.img ساخت کاربر (چه GSI و چه OEM) روت کند.
برای تصویر هسته عمومی (GKI) که از دستگاههایی با پارتیشن vendor_boot استفاده میکند، boot-debug.img نباید فلش شود، زیرا پارتیشن boot باید با یک تصویر GKI تأیید شده فلش شود. در عوض vendor_boot-debug.img باید روی پارتیشن vendor_boot فلش شود تا اشکالزدایی ramdisk تسهیل شود.
پیشنیازهای استفاده از ramdisk اشکالزدایی
دیباگ رمدیسک توسط تولیدکننده اصلی (OEM) که تستهای انطباق را اجرا میکند، ارائه میشود. این دیوایس نباید دارای امضای انتشار باشد و فقط در صورت باز بودن قفل دستگاه قابل استفاده است.
دیباگ رمدیسک برای ارتقاء دستگاههای دارای موارد زیر تولید یا استفاده نخواهد شد:
-
BOARD_BUILD_SYSTEM_ROOT_IMAGEدرست است -
skip_initramfsدر خط فرمان هسته
اندروید ۱۲ جیاسآی
برای استفاده از debug ramdisk با Android 12 GSI هیچ دستورالعمل اضافی لازم نیست.
از تاریخ 29/09/2021، دیباگ رمدیسکها دیگر نیازی به بهروزرسانی با ابزار repack_bootimg ندارند. نسخه اندروید 12 GSI بیلد پس از SGR1.210929.001 (7777720) فایل بهروز userdebug_plat_sepolicy.cil را در system.img خود گنجانده و userdebug_plat_sepolicy.cil را از دیباگ رمدیسک نادیده میگیرد. برای جزئیات بیشتر به CLها مراجعه کنید.
اندروید ۱۱ جی اس آی
وقتی از boot-debug.img یا vendor_boot-debug.img استفاده میشود، sepolicy سیستم از فایل userdebug_plat_sepolicy.cil در ramdisk مربوط به debug مربوط به boot-debug.img یا vendor_boot-debug.img بارگذاری میشود. برای بوت کردن تصاویر GSI، لطفاً همیشه تغییرات sepolicy بهروز را از شاخه android11-gsi برای بازسازی boot-debug.img یا vendor_boot-debug.img خود اعمال کنید.
از طرف دیگر، میتوان از ابزار repack_bootimg برای بازسازی boot-debug.img یا vendor_boot-debug.img با بهروزرسانی بخش GSI استفاده کرد.
یک رمدیسک دیباگ را دوباره بستهبندی کنید
به جای اعمال تغییرات sepolicy برای بازسازی boot-debug.img ، شرکا میتوانند از repack_bootimg برای بهروزرسانی فایل sepolicy GSI در boot-debug.img (یا vendor_boot-debug.img در صورتی که دستگاه از GKI استفاده میکند) استفاده کنند.
مراحل به شرح زیر است:
otatools.zipاز https://ci.android.com دانلود کنید. توصیه میکنیم از طریق شاخهaosp-android-latest-releaseکه شامل فایلهای ساختaosp_cf_arm64_only_phone-userdebugاست، دانلود کنید.محیط اجرا را برای
repack_bootimgتنظیم کنید:unzip otatools.zip -d otatoolsexport PATH="${PWD}/otatools/bin:${PATH}"repack_bootimg --helpفایل
userdebug_plat_sepolicy.cilیاboot-with-debug-ramdisk-${KERNEL_VERSION}.imgاز نسخه GSI که استفاده میکنید دانلود کنید. برای مثال، اگر از arm64 GSI باRJR1.211020.001 (7840830)استفاده میکنید، فایل 7840830 /aosp_arm64-user/latest را از https://ci.android.com/builds/submitted/ دانلود کنید.boot-debug.imgیاvendor_boot-debug.imgدستگاه را باuserdebug_plat_sepolicy.cilبهروزرسانی کنید:repack_bootimg --local --dst_bootimg boot-debug.img \ --ramdisk_add userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \ --ramdisk_add userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil# If using GKIrepack_bootimg --local --dst_bootimg vendor_boot-debug.img \ --ramdisk_add userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \ --ramdisk_add userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cilبا
boot-with-debug-ramdisk-${KERNEL_VERSION}.img:repack_bootimg --src_bootimg boot-with-debug-ramdisk-5.4.img \ --dst_bootimg boot-debug.img \ --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \ --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil# If using GKIrepack_bootimg --src_bootimg boot-with-debug-ramdisk-5.4.img \ --dst_bootimg vendor_boot-debug.img \ --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \ --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cilآرگومانهای
--ramdisk_addمیتوانند بر اساس پیکربندی دستگاه تنظیم شوند. برای توضیح بیشتر به بخش بعدی مراجعه کنید.
مسیر بخش userdebug
دستور repack_bootimg بالا، فایل userdebug_plat_sepolicy.cil را از ramdisk مربوط به --src_bootimg به ramdisk مربوط به --dst_bootimg کپی میکند. با این حال، مسیر درون یک ramdisk مربوط به debug ممکن است در نسخههای مختلف اندروید متفاوت باشد. در اندروید ۱۰ و ۱۱، مسیر first_stage_ramdisk/userdebug_plat_sepolicy.cil برای دستگاههایی با androidboot.force_normal_boot=1 در خط فرمان هسته است. در غیر این صورت، مسیر userdebug_plat_sepolicy.cil است.
دستور زیر را اجرا کنید تا بررسی کنید که آیا androidboot.force_normal_boot در خط فرمان هسته وجود دارد یا خیر:
adb rootadb shell cat /proc/cmdline | grep force_normal_boot
در اندروید ۱۲ و بالاتر، مسیر درون یک ramdisk اشکالزدایی، صرف نظر از وجود androidboot.force_normal_boot=1 در خط فرمان هسته، همیشه userdebug_plat_sepolicy.cil است. جدول زیر مسیرهای درون یک ramdisk اشکالزدایی را در نسخههای مختلف اندروید نشان میدهد.
| تصویر اشکالزدایی | اندروید ۱۰ | اندروید ۱۱ | اندروید ۱۲ |
|---|---|---|---|
| بوت GKI با دیباگ-رمدیسک-${KERNEL_VERSION}.img | ناموجود | first_stage_ramdisk/userdebug_plat_sepolicy.cil | userdebug_plat_sepolicy.cil |
| boot-debug.img مخصوص دستگاه | بستگی به force_normal_boot دارد | بستگی به force_normal_boot دارد | userdebug_plat_sepolicy.cil |
| vendor_boot-debug.img مختص دستگاه | ناموجود | بستگی به force_normal_boot دارد | userdebug_plat_sepolicy.cil |
شما میتوانید با استفاده از دستور --ramdisk_add ، فایلها را از مسیرهای مختلف و به src_path:dst_path دیگر کپی کنید. برای مثال، دستور زیر فایل first_stage_ramdisk/userdebug_plat_sepolicy.cil را از boot-with-debug-ramdisk-5.4.img اندروید ۱۱ به first_stage_ramdisk/userdebug_plat_sepolicy.cil در داخل vendor_boot-debug.img اندروید ۱۱ کپی میکند.
repack_bootimg \
--src_bootimg boot-with-debug-ramdisk-5.4.img \
--dst_bootimg vendor_boot-debug.img \
--ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil اگر در خط فرمان هسته، androidboot.force_normal_boot=1 وجود نداشته باشد، دستور باید به صورت زیر تنظیم شود تا مسیر مقصد به userdebug_plat_sepolicy.cil تغییر کند.
repack_bootimg \
--src_bootimg boot-with-debug-ramdisk-5.4.img \
--dst_bootimg vendor_boot-debug.img \
--ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cilیک پاورقی AVB اضافه کنید
اگر ایمیجی که به --dst_bootimg ارسال میشود به عنوان یک پارتیشن زنجیر شده با AVB پیکربندی شده باشد، پس از اجرای دستور repack_bootimg باید یک پاورقی AVB اضافه شود.
برای مثال، قبل از اجرای repack_bootimg ، دستور زیر را اجرا کنید تا بررسی کنید که آیا فایل vendor_boot-debug.img دارای پاورقی AVB زنجیری است یا خیر.
avbtool info_image --image vendor_boot-debug.img اگر در ابتدا دارای یک پاورقی AVB زنجیر شده باشد، باید پس از اجرای دستور repack_bootimg یک پاورقی AVB اضافه شود. استفاده از هر کلید آزمایشی برای امضای vendor_boot-debug.img کار میکند زیرا debug ramdisk فقط زمانی قابل استفاده است که دستگاه قفلگشایی شده باشد، که امکان ایجاد تصاویر امضا شده با کلید غیر آزاد را در پارتیشن boot یا vendor_boot فراهم میکند.
avbtool add_hash_footer --partition_name vendor_boot \
--partition_size 100663296 \
--algorithm SHA256_RSA4096 \
--key otatools/external/avb/test/data/testkey_rsa4096.pem \
--image vendor_boot-debug.img