Cómo evaluar el VTS con ramdisk de depuración

A partir de Android 10, Es una imagen genérica del sistema (GSI) que se usa para correr. Se modificó la prueba de cumplimiento de CTS en GSI/VTS de userdebug a tipo de compilación de user para firmar la versión. Este es un problema para las pruebas de VTS, ya que requiere adb root para ejecutar, pero adb root no está disponible en un dispositivo de compilación del usuario.

Se introduce el ramdisk de depuración (o imagen de arranque de depuración) para habilitar adb root en un de compilación de usuario cuyo bootloader es desbloqueada. Esto simplifica las pruebas con la misma GSI de compilación de usuario system.img para CTS en GSI VTS en GSI. Para la configuración de STS, el uso de otro OEM de userdebug system.img sigue siendo como en los productos necesarios.

En la siguiente tabla, se muestran los cambios en el tipo de compilación y imagen para las pruebas de cumplimiento en Android 10

Paquete de pruebas Probar con Compilación Depura ramdisk ¿raíz de adb? Android 9 -> 10 cambios en la variante de compilación
CTS Sistema del OEM user N N Sin cambios
CTS en GSI GSI user N N

userdebug -> GSI del usuario

versión firmada

STS Sistema del OEM userdebug N S Novedad en Q
VTS GSI user S S

userdebug -> GSI del usuario

versión firmada

Descripción general

Estos archivos de imagen adicionales se generan en la carpeta de compilación (${ANDROID_PRODUCT_OUT}):

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

Cuando se instala boot-debug.img en la partición boot del dispositivo, el elemento userdebug del archivo sepolicy del sistema y un archivo de propiedades adicional, Se cargaron adb_debug.prop. Esto permite adb root con la compilación de usuario system.img (ya sea de la GSI o del OEM).

Para Imagen genérica del kernel (GKI) usando dispositivos que tienen una partición vendor_boot, boot-debug.img no debe Se escribe en la memoria flash, ya que la partición boot debe escribirse en la memoria flash con una imagen de GKI certificada. En su lugar, se debe escribir vendor_boot-debug.img en la memoria flash del vendor_boot para facilitar la depuración de ramdisk.

Requisitos previos para usar un ramdisk de depuración

El OEM que ejecuta las pruebas de cumplimiento proporciona el ramdisk de depuración. Integra no debe tener una firma de autorización y solo se puede usar si el dispositivo está desbloqueado.

No se generará ni se usará el ramdisk de depuración para actualizar dispositivos con lo siguiente:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE (verdadero)
  • skip_initramfs en la línea de comandos del kernel

GSI de Android 12

No se requieren instrucciones adicionales para usar el ramdisk de depuración con la GSI de Android 12.

A partir del 29/09/2021, ya no es necesario actualizar los ramdisks de depuración con el repack_bootimg. GSI de Android 12 compilar después de que SGR1.210929.001 (7777720) incorpore la versión actualizada userdebug_plat_sepolicy.cil en su system.img y lo ignora userdebug_plat_sepolicy.cil del ramdisk de depuración. Consulta la CL para más detalles.

GSI de Android 11

Cuando se usan boot-debug.img o vendor_boot-debug.img, el sistema se carga la política desde el archivo userdebug_plat_sepolicy.cil en el archivo de depuración ramdisk del boot-debug.img o vendor_boot-debug.img Para iniciar la GSI imágenes, incorpore siempre cambios de políticas actualizados desde la android11-gsi para volver a compilar tu boot-debug.img o vendor_boot-debug.img.

Como alternativa, puedes usar la herramienta repack_bootimg para recompilar un boot-debug.img o vendor_boot-debug.img con la política de GSI actualizada.

Vuelve a empaquetar un ramdisk de depuración

En lugar de incorporar cambios en las políticas para recompilar boot-debug.img, los socios Puedes usar repack_bootimg para actualizar el archivo de política de GSI a boot-debug.img (o vendor_boot-debug.img si el dispositivo usa GKI).

Los pasos son los siguientes:

  1. Descargar otatools.zip de https://ci.android.com Recomendamos descargar desde los artefactos de compilación de aosp_arm64-userdebug el aosp-main.

  2. Configura el entorno de ejecución para repack_bootimg:

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. Descarga el archivo userdebug_plat_sepolicy.cil o boot-with-debug-ramdisk-${KERNEL_VERSION}.img de la compilación de la GSI usan. Por ejemplo, si usas una GSI de arm64 de RJR1.211020.001 (7840830) y, luego, descargar desde https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest.

  4. Actualiza el dispositivo boot-debug.img o vendor_boot-debug.img con 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
    

    Con 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
    

    Los argumentos de --ramdisk_add se pueden ajustar según el dispositivo. parámetros de configuración. Consulta la siguiente sección para obtener más información explicación.

Ruta de acceso de la política userdebug

El repack_bootimg anterior copia el archivo userdebug_plat_sepolicy.cil del ramdisk de --src_bootimg al ramdisk de --dst_bootimg. Sin embargo, la ruta dentro de un ramdisk de depuración pueden ser diferentes en diferentes versiones de Android. En Android 10 y 11, la ruta es first_stage_ramdisk/userdebug_plat_sepolicy.cil para dispositivos con androidboot.force_normal_boot=1 en la línea de comandos del kernel. De lo contrario, el ruta de acceso es userdebug_plat_sepolicy.cil.

Ejecuta el siguiente comando para verificar si hay androidboot.force_normal_boot. en la línea de comandos del kernel:

adb root
adb shell cat /proc/cmdline | grep force_normal_boot

A partir de Android 12, la ruta dentro de una depuración ramdisk siempre es userdebug_plat_sepolicy.cil, independientemente de la existencia de androidboot.force_normal_boot=1 en la línea de comandos del kernel. Lo siguiente En la tabla, se muestran las rutas de acceso de un ramdisk de depuración en diferentes versiones de Android.

Depurar imagen Android 10 Android 11 Android 12
GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img N/A first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
boot-debug.img específico del dispositivo Depende de force_normal_boot. Depende de force_normal_boot. userdebug_plat_sepolicy.cil
Proveedor_boot-debug.img específico del dispositivo N/A Depende de force_normal_boot. userdebug_plat_sepolicy.cil

Puedes especificar --ramdisk_add para copiar archivos desde y hacia rutas diferentes con un lista de pares src_path:dst_path. Por ejemplo, el siguiente comando copia el archivo first_stage_ramdisk/userdebug_plat_sepolicy.cil de un boot-with-debug-ramdisk-5.4.img de Android 11 a first_stage_ramdisk/userdebug_plat_sepolicy.cil en una vendor_boot-debug.img de 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

Si no hay androidboot.force_normal_boot=1 en la línea de comandos del kernel, entonces el comando se debe ajustar como se muestra a continuación para cambiar la ruta de destino a 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

Si la imagen que se pasa a --dst_bootimg se configura como Encadenado de AVB partición, se debe agregar un pie de página de AVB después de ejecutar repack_bootimg kubectl.

Por ejemplo, antes de ejecutar repack_bootimg, ejecuta el siguiente comando para Verifica si un elemento vendor_boot-debug.img tiene un pie de página de AVB encadenado.

avbtool info_image --image vendor_boot-debug.img

Si originalmente tiene un pie de página de AVB encadenado, se debe agregar un pie de página de AVB. después de ejecutar el comando repack_bootimg. Usar cualquier clave de prueba para firmar vendor_boot-debug.img funciona porque el ramdisk de depuración solo se puede usar cuando se el dispositivo está desbloqueado, lo que permite imágenes firmadas de claves que no se liberarán en boot o 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