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

Начиная с Android 10, тип образа Generic System Image (GSI), используемый для тестирования соответствия CTS-on-GSI/VTS, был изменён с userdebug на user build для получения подписи на выпуск. Это создаёт проблему для тестирования VTS, поскольку для работы VTS требуется adb root , но adb root недоступен на устройстве с пользовательской сборкой.

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

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

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

userdebug -> пользовательский GSI

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

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

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 для обеспечения отладочного RAM-диска.

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

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

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

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

Android 12 GSI

Для использования отладочного ramdisk с 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 .

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