디버그 램디스크를 사용한 VTS 테스트

Android 10부터 일반 시스템 이미지 (GSI)를 사용하여 CTS-on-GSI/VTS 규정 준수 테스트를 실행하는 데 사용되는 GSI가 출시 서명된 버전으로 만들기 위해 userdebug에서 사용자 빌드 유형으로 변경되었습니다. 이는 VTS 테스트의 문제입니다. VTS에서는 adb root를 실행해야 하지만 adb root을 사용자 빌드 기기에서 사용할 수 없기 때문입니다.

부트로더가 잠금 해제된 사용자 빌드 기기에서 adb root를 사용할 수 있도록 디버그 램디스크(또는 디버그 부팅 이미지)가 도입되었습니다. 이를 통해 CTS-on-GSI 및 VTS-on-GSI에 동일한 사용자 빌드 GSI system.img를 사용할 수 있어 테스트 플로우가 간소화됩니다. STS 설정에서는 여전히 또 다른 userdebug OEM system.img를 사용해야 합니다.

다음 표에 Android 10에서의 규정 준수 테스트를 위한 이미지와 빌드 유형 변경사항이 나와 있습니다.

테스트 모음 테스트에 사용할 에이전트 빌드 디버그 램디스크 adb 루트 여부 Android 9 -> 10 빌드 변형 변경
CTS OEM 시스템 user 아니요 아니요 변경사항 없음
CTS-on-GSI GSI user 아니요 아니요

userdebug -> user GSI

출시 서명됨

STS OEM 시스템 userdebug 아니요 Q의 새로운 기능
VTS GSI user

userdebug -> user GSI

출시 서명됨

개요

빌드 폴더(${ANDROID_PRODUCT_OUT}) 아래에 다음과 같은 추가 이미지 파일이 생성됩니다.

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

기기의 boot 파티션에 boot-debug.img가 플래시되면 시스템 sepolicy 파일의 userdebug 버전과 추가 속성 파일 adb_debug.prop이 로드됩니다. 이렇게 하면 사용자 빌드 system.img(GSI 또는 OEM)를 통해 adb root가 가능합니다.

vendor_boot 파티션이 있는 기기를 사용하는 일반 커널 이미지(GKI)의 경우 boot-debug.img를 플래시해서는 안 됩니다. boot 파티션은 인증된 GKI 이미지로 플래시해야 하기 때문입니다. 디버그 램디스크를 용이하게 하려면 대신 vendor_boot-debug.imgvendor_boot 파티션에 플래시해야 합니다.

디버그 램디스크 사용을 위한 필수 요건

디버그 램디스크는 규정 준수 테스트를 실행하는 OEM에서 제공합니다. 디버그 램디스크는 출시 서명된 버전이어서는 안 되며, 기기가 잠금 해제된 경우에만 사용할 수 있습니다.

다음과 같은 방법으로 기기를 업그레이드할 때에는 디버그 램디스크가 생성되거나 사용되지 않습니다.

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE true
  • 커널 명령줄의 skip_initramfs

Android 12 GSI

Android 12 GSI에서 디버그 램디스크를 사용하기 위한 추가 안내는 필요하지 않습니다.

2021년 9월 29일부터는 더 이상 repack_bootimg 도구로 디버그 램디스크를 업데이트할 필요가 없습니다. SGR1.210929.001 (7777720) 이후 Android 12 GSI 빌드는 system.img에 최신 userdebug_plat_sepolicy.cil 파일을 통합하고 디버그 램디스크의 userdebug_plat_sepolicy.cil을 무시합니다. 자세한 내용은 CL을 참고하세요.

Android 11 GSI

boot-debug.img 또는 vendor_boot-debug.img가 사용되는 경우 boot-debug.img 또는 vendor_boot-debug.img의 디버그 램디스크에 있는 userdebug_plat_sepolicy.cil 파일에서 시스템 sepolicy가 로드됩니다. GSI 이미지를 부팅하려면 항상 android11-gsi 브랜치의 최신 sepolicy 변경사항을 통합하여 boot-debug.img 또는 vendor_boot-debug.img를 다시 빌드하세요.

또는 업데이트된 GSI sepolicy에 repack_bootimg 도구를 사용하여 boot-debug.img 또는 vendor_boot-debug.img를 다시 빌드할 수 있습니다.

디버그 램디스크 재구성

sepolicy 변경사항을 통합하여 boot-debug.img를 다시 빌드하는 대신 파트너는 repack_bootimg를 사용하여 GSI sepolicy 파일을 boot-debug.img(또는 기기에서 GKI를 사용하는 경우 vendor_boot-debug.img)로 업데이트할 수 있습니다.

단계는 다음과 같습니다.

  1. otatools.zip을(를) https://ci.android.com에서 다운로드합니다. aosp-android-latest-release 브랜치의 aosp_cf_arm64_only_phone-userdebug 빌드 아티팩트에서 다운로드하는 것이 좋습니다.

  2. repack_bootimg의 실행 환경을 설정합니다.

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
  3. 사용 중인 GSI 빌드에서 userdebug_plat_sepolicy.cil 또는 boot-with-debug-ramdisk-${KERNEL_VERSION}.img를 다운로드합니다. 예를 들어 RJR1.211020.001 (7840830)에서 arm64 GSI를 사용 중인 경우 https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest에서 다운로드합니다.

  4. 기기 boot-debug.img 또는 vendor_boot-debug.imguserdebug_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의 인수는 기기 설정에 따라 조정할 수 있습니다. 자세한 설명은 다음 섹션을 참고하세요.

userdebug sepolicy의 경로

repack_bootimg--src_bootimg 램디스크의 userdebug_plat_sepolicy.cil 파일을 --dst_bootimg 램디스크에 복사합니다. 그러나 디버그 램디스크 내 경로는 Android 버전마다 다를 수 있습니다. Android 10 및 11에서 경로는 커널 명령줄에 androidboot.force_normal_boot=1이 있는 기기의 경우 first_stage_ramdisk/userdebug_plat_sepolicy.cil입니다. 그 외의 경우 경로는 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 존재 여부와 관계없이 항상 userdebug_plat_sepolicy.cil입니다. 다음 표는 다양한 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 쌍 목록이 포함된 다양한 경로에서 또는 다양한 경로로 파일을 복사할 수 있습니다. 예를 들어 다음 명령어는 Android 11 boot-with-debug-ramdisk-5.4.imgfirst_stage_ramdisk/userdebug_plat_sepolicy.cil 파일을 Android 11 vendor_boot-debug.imgfirst_stage_ramdisk/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: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