در Android 10 و نسخههای بالاتر،
تصویر سیستم عمومی (GSI) که برای اجرای
آزمایش انطباق CTS-on-GSI/VTS استفاده میشد
از نوع ساخت اشکالزدایی از سمت کاربر به نوع ساخت کاربر تغییر کرد تا با امضای انتشار سازگار شود. این یک مشکل برای آزمایش VTS است زیرا VTS برای اجرا به adb root نیاز دارد، اما adb root در دستگاه ساخت کاربر دردسترس نیست.
ramdisk اشکالزدایی (یا تصویر راهاندازی اشکالزدایی) برای فعال کردن adb root در دستگاه ساخت کاربر که bootloader آن قفلباز است معرفی شده است. این کار بااستفاده از ساخت کاربر GSI یکسان system.img برای CTS-on-GSI و VTS-on-GSI، جریان آزمایش را ساده میکند. برای راهاندازی STS، همچنان باید از OEM کاربر اشکالزدایی دیگری system.img استفاده کنید.
جدول زیر تغییرات نوع تصویر و ساخت را برای آزمایش انطباق در Android 10 نشان میدهد.
| مجموعه آزمون | آزمایش کردن با | ساخت | اشکالزدایی ramdisk | adb root؟ | تغییر تنوع ساخت Android 9 -> 10 |
|---|---|---|---|---|---|
| CTS | سیستم سازنده اصلی محصول | کاربر | از شمال | از شمال | تغییری نیست |
| CTS-on-GSI | تصویر سیستم عمومی | کاربر | از شمال | از شمال | userdebug -> کاربر GSI نسخه پخش امضاشده |
| STS | سیستم سازنده اصلی محصول | userdebug | از شمال | س | جدید در Q |
| VTS | GSI | کاربر | س | س | userdebug -> کاربر GSI نسخه پخش امضاشده |
نمای کلی
این فایلهای تصویر اضافی در پوشه ساخت (${ANDROID_PRODUCT_OUT}) تولید میشوند:
boot-debug.imgvendor_boot-debug.img
وقتی boot-debug.img در پارتیشن boot دستگاه نصب میشود، نسخه userdebug فایل sepolicy سیستم و فایل دارایی اضافی، adb_debug.prop، بار میشود. این کار به adb root با ساخت کاربر
system.img (GSI یا سازنده اصلی محصول) اجازه میدهد.
برای
تصویر هسته عمومی (GKI)
بااستفاده از دستگاههایی که پارتیشن vendor_boot دارند، boot-debug.img نباید
فلش شود، زیرا پارتیشن boot باید با تصویر GKI دارای گواهینامه فلش شود.
درعوض، vendor_boot-debug.img باید روی vendor_boot
پارتیشن چشمک بزند تا اشکالزدایی ramdisk تسهیل شود.
پیشنیازهای استفاده از ramdisk اشکالزدایی
سازنده اصلی محصول که آزمایشهای انطباق را اجرا میکند، ramdisk اشکالزدایی را ارائه میدهد. نباید امضای نسخه نهایی داشته باشد و فقط درصورتی میتوان از آن استفاده کرد که قفل دستگاه باز باشد.
از ramdisk اشکالزدایی برای ارتقای دستگاههای زیر استفاده نخواهد شد یا تولید نخواهد شد:
-
BOARD_BUILD_SYSTEM_ROOT_IMAGEدرست -
skip_initramfsدر خط فرمان هسته
Android 12 GSI
برای استفاده از ramdisk اشکالزدایی با Android 12 GSI، دستورالعمل اضافی لازم نیست.
از تاریخ ۰۹/۲۹/۲۰۲۱، ramdiskهای اشکالزدایی دیگر نیازی به بهروزرسانی با ابزار
repack_bootimg ندارند. ساختمان Android 12 GSI
بعداز SGR1.210929.001 (7777720) فایل
userdebug_plat_sepolicy.cil بهروز را در system.img خود ادغام میکند و
userdebug_plat_sepolicy.cil را از ramdisk اشکالزدایی نادیده میگیرد. برای جزئیات،
CLs را ببینید.
Android 11 GSI
وقتی از boot-debug.img یا vendor_boot-debug.img استفاده میشود، سیستم
sepolicy از فایل userdebug_plat_sepolicy.cil در
ramdisk اشکالزدایی 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 با sepolicy GSI بهروزشده استفاده کرد.
بستهبندی مجدد ramdisk اشکالزدایی
شرکا بهجای ادغام تغییرات sepolicy برای بازسازی boot-debug.img، میتوانند از repack_bootimg برای بهروزرسانی فایل sepolicy «میانای استاندارد عمومی» در boot-debug.img
(یا vendor_boot-debug.img درصورتیکه دستگاه از GKI استفاده میکند) استفاده کنند.
مراحل به این صورت است:
otatools.zipرا از https://ci.android.com بارگیری کنید. توصیه میکنیم از مصنوعات ساختaosp_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 که استفاده میکنید بارگیری کنید. برای مثال، اگر از GSI arm64 از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را میتوان براساس پیکربندیهای دستگاه تنظیم کرد. برای توضیحات دقیق، بخش بعدی را ببینید.
مسیر sepolicy کاربر اشکالزدایی
دستور بالا repack_bootimg فایل userdebug_plat_sepolicy.cil را از
دیسک حافظه --src_bootimg به دیسک حافظه --dst_bootimg کپی میکند. بااینحال، مسیر
در ramdisk اشکالزدایی ممکن است در نسخههای مختلف Android متفاوت باشد. در Android 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 و بالاتر، مسیر درون ramdisk اشکالزدایی همیشه userdebug_plat_sepolicy.cil است، صرفنظر از وجود androidboot.force_normal_boot=1 در خط فرمان هسته. جدول زیر مسیرهای داخل ramdisk اشکالزدایی را در نسخههای مختلف Android نشان میدهد.
| اشکالزدایی تصویر | Android 10 | Android 11 | Android نسخه ۱۲ |
|---|---|---|---|
| GKI boot-with-debug-ramdisk-${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 را از 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-chained
پارتیشن پیکربندی شده باشد، پساز اجرای فرمان repack_bootimg
، باید یک پانویس AVB اضافه شود.
برای مثال، قبلاز اجرای repack_bootimg، فرمان زیر را اجرا کنید تا بررسی کنید که آیا vendor_boot-debug.img دارای پانویس AVB زنجیرهای است یا خیر.
avbtool info_image --image vendor_boot-debug.imgاگر در ابتدا دارای پانویس AVB زنجیرهای باشد، پانویس AVB باید پساز اجرای فرمان repack_bootimg اضافه شود. استفاده از هر کلید آزمایشی برای امضای
vendor_boot-debug.img کار میکند زیرا دیسک مجازی اشکالزدایی فقط زمانی قابلاستفاده است که
قفل دستگاه باز باشد، که این امر اجازه میدهد تصاویر امضاشده با کلید غیرانتشار در بخش 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