از اندروید 10، تصویر سیستم عمومی (GSI) که برای اجرای آزمایش انطباق CTS-on-GSI/VTS استفاده میشد، از userdebug به نوع ساخت کاربر تغییر کرد تا امضا شود. این یک مشکل برای آزمایش VTS است زیرا VTS برای اجرا به adb root نیاز دارد، اما adb root در دستگاه ساخت کاربر در دسترس نیست.
ramdisk اشکالزدایی (یا تصویر راهاندازی اشکالزدایی) برای فعال کردن adb root در دستگاه ساخت کاربر که بوت لودر آن باز است، معرفی شده است. این امر جریان آزمایش را با استفاده از همان ساخت کاربر GSI system.img برای CTS-on-GSI و VTS-on-GSI ساده می کند. برای راه اندازی STS، استفاده از یک userdebug OEM system.img دیگر همچنان مورد نیاز است.
جدول زیر تغییرات تصویر و نوع ساخت را برای تست انطباق در اندروید 10 نشان می دهد.
| مجموعه تست | تست با | ساخت | دیباگ ramdisk | ریشه adb | تغییر نوع ساخت اندروید 9 -> 10 |
|---|---|---|---|---|---|
| سی تی اس | سیستم OEM | کاربر | ن | ن | بدون تغییر |
| CTS-on-GSI | GSI | کاربر | ن | ن | userdebug -> کاربر GSI آزادی امضا شد |
| STS | سیستم OEM | کاربر اشکال زدایی | ن | Y | جدید در Q |
| VTS | GSI | کاربر | Y | Y | userdebug -> کاربر GSI آزادی امضا شد |
نمای کلی
این فایلهای تصویری اضافی در پوشه ساخت ( ${ANDROID_PRODUCT_OUT} ) تولید میشوند:
-
boot-debug.img -
vendor_boot-debug.img
هنگامی که boot-debug.img بر روی پارتیشن boot دستگاه فلش می شود، نسخه userdebug فایل سیستم سیاست و یک فایل ویژگی اضافی، adb_debug.prop ، بارگذاری می شود. این به adb root با user build system.img (یا GSI یا OEM) اجازه میدهد.
برای تصویر هسته عمومی (GKI) با استفاده از دستگاههایی که دارای پارتیشن vendor_boot هستند، boot-debug.img نباید فلش شود، زیرا پارتیشن boot باید با یک تصویر GKI تأیید شده فلش شود. در عوض vendor_boot-debug.img باید روی پارتیشن vendor_boot فلش شود تا اشکال زدایی ramdisk تسهیل شود.
پیش نیازهای استفاده از دیباگ ramdisk
ramdisk اشکال زدایی توسط OEM که تست های انطباق را اجرا می کند ارائه می شود. نباید امضا شده باشد و فقط در صورتی می توان از آن استفاده کرد که قفل دستگاه باز باشد.
ramdisk اشکالزدایی برای ارتقاء دستگاههایی با موارد زیر تولید یا استفاده نمیشود:
-
BOARD_BUILD_SYSTEM_ROOT_IMAGEدرست است -
skip_initramfsدر خط فرمان هسته
اندروید 12 GSI
برای استفاده از دیباگ ramdisk با Android 12 GSI به هیچ دستورالعمل اضافی نیاز نیست.
از تاریخ 2021/09/29، دیسکهای دیباگ دیگر نیازی به بهروزرسانی با ابزار repack_bootimg ندارند. نسخه Android 12 GSI پس از SGR1.210929.001 (7777720) فایل بهروز userdebug_plat_sepolicy.cil را در system.img خود گنجانده است و userdebug_plat_sepolicy.cil از ramdisk اشکالزدایی نادیده میگیرد. برای جزئیات به CL ها مراجعه کنید.
اندروید 11 GSI
هنگامی که boot-debug.img یا vendor_boot-debug.img استفاده می شود، سیاست سیستم از فایل userdebug_plat_sepolicy.cil در رام دیسک اشکال زدایی boot-debug.img یا vendor_boot-debug.img بارگیری می شود. برای راهاندازی تصاویر GSI، لطفاً همیشه تغییرات بهروز سیاستگذاری را از شاخه 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 برای بهروزرسانی فایل سیاستگذاری GSI به boot-debug.img (یا vendor_boot-debug.img اگر دستگاه از GKI استفاده میکند) استفاده کنند.
مراحل به شرح زیر است:
otatools.zipاز https://ci.android.com دانلود کنید. ما توصیه میکنیم که از build artifactsaosp_cf_arm64_only_phone-userdebugدر شعبهaosp-android-latest-releaseدانلود کنید.محیط اجرا را برای
repack_bootimgتنظیم کنید:unzip otatools.zip -d otatoolsexport PATH="${PWD}/otatools/bin:${PATH}"repack_bootimg --helpuserdebug_plat_sepolicy.cilیاboot-with-debug-ramdisk-${KERNEL_VERSION}.imgاز بیلد GSI که استفاده میکنید دانلود کنید. برای مثال، اگر از arm64 GSI ازRJR1.211020.001 (7840830)استفاده میکنید، از https://ci.android.com/builds/submitted/ 7840830 /aosp_arm64-user/latest دانلود کنید.دستگاه
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را می توان با توجه به تنظیمات دستگاه تنظیم کرد. برای توضیح دقیق به بخش بعدی مراجعه کنید.
مسیر سیاست اشکالات کاربر
repack_bootimg بالا فایل userdebug_plat_sepolicy.cil را از ramdisk --src_bootimg به ramdisk --dst_bootimg کپی می کند. با این حال، مسیر درون دیسک ramdisk ممکن است در نسخههای مختلف اندروید متفاوت باشد. در اندروید 10 و 11، مسیر 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
با شروع از Android 12، بدون در نظر گرفتن وجود androidboot.force_normal_boot=1 در خط فرمان هسته، مسیر درون یک ramdisk debug همیشه userdebug_plat_sepolicy.cil است. جدول زیر مسیرهای درون دیباگ ramdisk را در نسخه های مختلف اندروید نشان می دهد.
| اشکال زدایی تصویر | اندروید 10 | اندروید 11 | اندروید 12 |
|---|---|---|---|
| GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img | N/A | 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 مخصوص دستگاه | N/A | بستگی به force_normal_boot دارد | userdebug_plat_sepolicy.cil |
میتوانید --ramdisk_add برای کپی کردن فایلها از و به مسیرهای مختلف با لیستی از جفتهای src_path:dst_path تعیین کنید. به عنوان مثال، دستور زیر فایل first_stage_ramdisk/userdebug_plat_sepolicy.cil را از یک Android 11 boot-with-debug-ramdisk-5.4.img به first_stage_ramdisk/userdebug_plat_sepolicy.cil در Android 11 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 کار میکند زیرا 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