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

Начиная с Android 10, Generic System Image (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 по-прежнему требуется использование другого пользовательского OEM system.img .

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

Тестовый набор Тест с Строить Отладочный электронный диск adb root? Изменение варианта сборки 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 системного файла sepolicy и дополнительный файл свойств adb_debug.prop . Это позволяет использовать adb root с пользовательской сборкой system.img (либо GSI, либо OEM).

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

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

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

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

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

Android 12 GSI

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

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

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 с обновленной политикой GSI.

Перепаковка отладочного ramdisk

Вместо включения изменений sepolicy для пересборки boot-debug.img партнеры могут использовать repack_bootimg для обновления файла GSI sepolicy в 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, которую вы используете. Например, если вы используете 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 может отличаться в разных версиях 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, путь внутри отладочного ramdisk всегда userdebug_plat_sepolicy.cil , независимо от наличия androidboot.force_normal_boot=1 в командной строке ядра. В следующей таблице показаны пути внутри отладочного ramdisk в разных версиях 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 из 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, нижний колонтитул AVB необходимо добавить после запуска команды repack_bootimg . Использование любого тестового ключа для подписи vendor_boot-debug.img работает, поскольку отладочный ramdisk можно использовать только при разблокированном устройстве, что позволяет использовать подписанные ключом non-release образы на 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