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

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

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

В таблице ниже приведены изменения в типах образов и сборок для тестирования на соответствие требованиям в Android 10.

Набор тестов Выбрать агент пользователя для проверки Сборка Отладка ramdisk adb root? Изменение варианта сборки Android 9 -> 10
CTS Система OEM пользователь НЕТ НЕТ Без изменений
CTS-on-GSI GSI пользователь НЕТ НЕТ

userdebug -> user GSI

Выпуск подписан

STS Система OEM-производителя userdebug НЕТ Г Новое в Q
VTS GSI пользователь Г Г

userdebug -> user GSI

Выпуск подписан

Обзор

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

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

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

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

Требования для использования ramdisk отладки

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

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

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

Android 12 GSI

Чтобы использовать ramdisk для отладки с образом GSI Android 12, не нужны дополнительные инструкции.

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

Android 11 GSI

Когда используется файл boot-debug.img или vendor_boot-debug.img, системный файл sepolicy загружается из файла userdebug_plat_sepolicy.cil в отладочном RAM-диске файла 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.

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

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

Инструкции приведены ниже.

  1. Скачайте otatools.zip с сайта https://ci.android.com. Мы рекомендуем скачивать артефакты сборки aosp_cf_arm64_only_phone-userdebug из ветки aosp-android-latest-release.

  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/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 можно настроить в соответствии с конфигурациями устройства. Подробную информацию вы найдете в следующем разделе.

Путь к файлу sepolicy для userdebug

Приведенная выше команда repack_bootimg копирует файл userdebug_plat_sepolicy.cil из RAM-диска --src_bootimg на RAM-диск --dst_bootimg. Однако путь в отладочном RAM-диске может отличаться в разных версиях 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 и более поздних версиях путь в debug ramdisk всегда userdebug_plat_sepolicy.cil, независимо от того, есть ли androidboot.force_normal_boot=1 в командной строке ядра. В таблице ниже указаны пути в отладочном ОЗУ-диске в разных версиях Android.

Отладочное изображение Android 10 Android 11 Android 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 из 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-chained раздел, после выполнения команды 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 можно использовать любой тестовый ключ, поскольку виртуальный диск отладки работает, только когда устройство разблокировано. Это позволяет использовать образы, подписанные нерелизными ключами, в разделе 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