از اندروید 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 دانلود کنید. توصیه میکنیم از ساخت مصنوعاتaosp_arm64-userdebug
درaosp-main
دانلود کنید.محیط اجرا را برای
repack_bootimg
تنظیم کنید:unzip otatools.zip -d otatools
export 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)
استفاده میکنید، از 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 GKI
repack_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 GKI
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 \ --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 root
adb 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