Android 10부터 CSI-on-GSI/VTS 규정 준수 테스트를 실행하는 데 사용되는 일반 시스템 이미지(GSI)를 출시 서명된 버전으로 만들기 위해 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.img
를 vendor_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
)로 업데이트할 수 있습니다.
단계는 다음과 같습니다.
https://ci.android.com에서
otatools.zip
을 다운로드합니다.aosp-main
의aosp_arm64-userdebug
빌드 아티팩트에서 다운로드하는 것이 좋습니다.repack_bootimg
의 실행 환경을 설정합니다.unzip otatools.zip -d otatools
export PATH="${PWD}/otatools/bin:${PATH}"
repack_bootimg --help
사용 중인 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에서 다운로드합니다.기기
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
의 인수는 기기 설정에 따라 조정할 수 있습니다. 자세한 설명은 다음 섹션을 참고하세요.
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.img
의 first_stage_ramdisk/userdebug_plat_sepolicy.cil
파일을 Android 11 vendor_boot-debug.img
내 first_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
AVB 푸터 추가
--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