Тестирование VTS с отладочным RAM-диском

Начиная с Android 10, общий образ системы (GSI), используемый для запуска тестирования на соответствие CTS-on-GSI/VTS, изменился с пользовательской отладки на тип пользовательской сборки, чтобы его можно было подписать выпуском. Это проблема для тестирования VTS, поскольку для запуска VTS требуется adb root , но adb root недоступен на устройстве пользовательской сборки.

Отладочный виртуальный диск (или отладочный загрузочный образ) введен для включения adb root на пользовательском устройстве сборки, загрузчик которого разблокирован . Это упрощает процесс тестирования за счет использования одной и той же пользовательской сборки GSI system.img для CTS-on-GSI и VTS-on-GSI. Для настройки STS по-прежнему требуется использование другого OEM-файла userdebug system.img .

В следующей таблице показаны изменения образа и типа сборки для тестирования на соответствие в Android 10.

Набор тестов Тест с Строить Отладочный виртуальный диск корень адб? Изменение варианта сборки Android 9 -> 10
КТС OEM-система пользователь Н Н Без изменений
CTS-на-GSI ГСИ пользователь Н Н

userdebug -> пользователь GSI

релиз подписан

СТС OEM-система пользовательская отладка Н Да Новое в Q
СУДС ГСИ пользователь Да Да

userdebug -> пользователь GSI

релиз подписан

Обзор

Эти дополнительные файлы изображений создаются в папке сборки ( ${ANDROID_PRODUCT_OUT} ):

  • boot-debug.img
  • vendor_boot-debug.img

Когда boot-debug.img прошивается в boot раздел устройства, загружается версия userdebug файла системной политики и дополнительный файл свойств adb_debug.prop . Это позволяет использовать adb root с пользовательской сборкой system.img (GSI или OEM).

Для универсального образа ядра (GKI) с использованием устройств с vendor_boot нельзя прошивать boot-debug.img , поскольку boot раздел должен быть прошит сертифицированным образом GKI. Вместо этого vendor_boot-debug.img следует записать в vendor_boot , чтобы облегчить отладку виртуального диска.

Предварительные условия для использования отладочного виртуального диска

Отладочный виртуальный диск предоставляется OEM-производителем, проводящим тесты на соответствие. Он не должен быть подписан выпуском и может использоваться только в том случае, если устройство разблокировано.

Отладочный виртуальный диск не будет создан или использован для обновления устройств с помощью:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE правда
  • skip_initramfs в командной строке ядра

Андроид 12 ГСИ

Для использования виртуального диска отладки с Android 12 GSI не требуется никаких дополнительных инструкций.

С 29.09.2021 отладочные рамдиски больше не требуют обновления инструментом repack_bootimg . Сборка Android 12 GSI после SGR1.210929.001 (7777720) включает обновленный файл userdebug_plat_sepolicy.cil в свой system.img и игнорирует userdebug_plat_sepolicy.cil с виртуального диска отладки. Подробности смотрите в CL .

Андроид 11 ГСИ

При использовании boot-debug.img илиvendor_boot vendor_boot-debug.img системная политика безопасности загружается из файла userdebug_plat_sepolicy.cil на виртуальном диске отладки boot-debug.img илиvendor_boot vendor_boot-debug.img . Чтобы загрузить образы GSI, всегда добавляйте актуальные изменения sepolicy из ветки android11-gsi , чтобы перестроить ваш boot-debug.img илиvendor_boot vendor_boot-debug.img .

В качестве альтернативы можно использовать инструмент repack_bootimg для пересборки boot-debug.img vendor_boot-debug.img с обновленной политикой GSI sepolicy.

Перепаковать отладочный виртуальный диск

Вместо внесения изменений sepolicy для пересборки boot-debug.img партнеры могут использовать repack_bootimg для обновления файла sepolicy 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. Например, если вы используете GSI Arm64 от RJR1.211020.001 (7840830) , загрузите его с https://ci.android.com/builds/submit/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 с виртуального диска --src_bootimg на виртуальный диск --dst_bootimg . Однако путь на виртуальном диске отладки может отличаться в разных версиях 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 root
adb shell cat /proc/cmdline | grep force_normal_boot

Начиная с Android 12, путь внутри виртуального диска отладки всегда userdebug_plat_sepolicy.cil , независимо от наличия androidboot.force_normal_boot=1 в командной строке ядра. В следующей таблице показаны пути внутри виртуального диска отладки в разных версиях Android.

Отладочное изображение Андроид 10 Андроид 11 Андроид 12
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 из файла boot-with-debug-ramdisk-5.4.img Android 11 в first_stage_ramdisk/userdebug_plat_sepolicy.cil внутри vendor_boot-debug.img Android 11.

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, нижний колонтитул 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