تست VTS با دیباگ ramdisk

از اندروید 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 استفاده می‌کند) استفاده کنند.

مراحل به شرح زیر است:

  1. otatools.zip از https://ci.android.com دانلود کنید. توصیه می‌کنیم از ساخت مصنوعات aosp_arm64-userdebug در aosp-main دانلود کنید.

  2. محیط اجرا را برای repack_bootimg تنظیم کنید:

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. 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 دانلود کنید.

  4. دستگاه 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

اگر تصویر ارسال شده به --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