En Android 10 y versiones posteriores, la
imagen genérica del sistema (GSI) que se usa para ejecutar la prueba de cumplimiento de
CTS en GSI/VTS cambió
de userdebug a tipo de compilación del usuario para que se firme la versión. Esto es un
problema para las pruebas de VTS porque VTS requiere
adb root para ejecutarse, 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
dispositivo de compilación del usuario cuyo bootloader está
desbloqueado. De esa manera, se simplifica el flujo de prueba usando la misma GSI de compilación del usuario system.img para CTS en GSI y VTS en GSI. Para la configuración de STS, aún se requiere usar otra system.img de userdebug OEM.
En la siguiente tabla, se muestran los cambios en el tipo de imagen y compilación para las pruebas de cumplimiento en Android 10.
| Paquete de pruebas | Probar con | Compilación | Ramdisk de depuración | ¿adb root? | Cambio de variante de compilación de Android 9 a 10 |
|---|---|---|---|---|---|
| CTS | Sistema del OEM | usuario | N | N | Sin cambios |
| CTS en GSI | GSI | usuario | N | N | userdebug -> GSI del usuario versión firmada |
| STS | Sistema del OEM | userdebug | N | Y | Novedad en Q |
| VTS | GSI | usuario | Y | Y | 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.imgvendor_boot-debug.img
Cuando boot-debug.img se escribe en la memoria flash en la partición boot del dispositivo, se carga la
versión userdebug del archivo sepolicy del sistema y un archivo de propiedades adicional,
adb_debug.prop. Esto permite adb root con la system.img de compilación del usuario (la GSI o la del OEM).
En el caso de los dispositivos que usan la
imagen genérica del kernel (GKI)
que tienen una partición vendor_boot, no se debe escribir en la memoria flash boot-debug.img, ya que la partición bootdebe escribirse en la memoria flash con una imagen de GKI certificada.
En su lugar, se debe escribir en la memoria flash vendor_boot-debug.img en la partición vendor_boot
para facilitar el ramdisk de depuración.
Requisitos previos para usar un ramdisk de depuración
El OEM que ejecuta las pruebas de cumplimiento proporciona el ramdisk de depuración. No debe firmarse la versión y solo se puede usar si el dispositivo está desbloqueado.
El ramdisk de depuración no se generará ni se usará para actualizar dispositivos con lo siguiente:
BOARD_BUILD_SYSTEM_ROOT_IMAGEtrueskip_initramfsen la línea de comandos del kernel
GSI de Android 12
No se requiere ninguna instrucción adicional para usar el ramdisk de depuración con la GSI de Android 12.
A partir del 29/9/2021, los ramdisks de depuración ya no requieren actualización con la
repack_bootimg herramienta. La compilación de la GSI de Android 12 después de SGR1.210929.001 (7777720) incorpora el archivo userdebug_plat_sepolicy.cil actualizado en su system.img y omite userdebug_plat_sepolicy.cil del ramdisk de depuración. Consulta los
CL para
obtener más detalles.
GSI de Android 11
Cuando se usa boot-debug.img o vendor_boot-debug.img, se carga el sepolicy del sistema
desde el archivo userdebug_plat_sepolicy.cil en el ramdisk de depuración
de boot-debug.img o vendor_boot-debug.img. Para iniciar imágenes de GSI, siempre incorpora cambios de sepolicy actualizados de la rama
android11-gsi
para volver a compilar tu boot-debug.img o vendor_boot-debug.img.
Como alternativa, se puede usar la herramienta repack_bootimg para volver a compilar un
boot-debug.img o vendor_boot-debug.img con sepolicy de GSI actualizado.
Vuelve a empaquetar un ramdisk de depuración
En lugar de incorporar cambios de sepolicy para volver a compilar boot-debug.img, los socios
pueden usar repack_bootimg para actualizar el archivo sepolicy de GSI a boot-debug.img
(o vendor_boot-debug.img si el dispositivo usa GKI).
Los pasos son los siguientes:
Descarga
otatools.zipde https://ci.android.com. Te recomendamos que descargues los artefactos de compilación deaosp_cf_arm64_only_phone-userdebugen laaosp-android-latest-releaserama.Configura el entorno de ejecución para
repack_bootimg:unzip otatools.zip -d otatoolsexport PATH="${PWD}/otatools/bin:${PATH}"repack_bootimg --helpDescarga
userdebug_plat_sepolicy.ciloboot-with-debug-ramdisk-${KERNEL_VERSION}.imgde la compilación de GSI que estás usando. Por ejemplo, si usas una GSI de arm64 deRJR1.211020.001 (7840830), descarga desde https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest.Actualiza el dispositivo
boot-debug.imgovendor_boot-debug.imgconuserdebug_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 GKIrepack_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.cilCon
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 GKIrepack_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.cilLos argumentos de
--ramdisk_addse pueden ajustar según las configuraciones del dispositivo. Consulta la siguiente sección para obtener una explicación detallada.
Ruta de acceso del sepolicy de 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 de acceso dentro de un ramdisk de depuración puede ser diferente en diferentes versiones de Android. En Android 10 y 11, la ruta de acceso 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, la 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 rootadb shell cat /proc/cmdline | grep force_normal_boot
En Android 12 y versiones posteriores, la ruta de acceso dentro de un ramdisk de depuración siempre es userdebug_plat_sepolicy.cil, independientemente de la existencia de androidboot.force_normal_boot=1 en la línea de comandos del kernel. En la siguiente tabla, se muestran las rutas de acceso dentro de un ramdisk de depuración en diferentes versiones de Android.
| Imagen de depuración | 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 |
| vendor_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 diferentes rutas de acceso con una 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 dentro de un 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.cilSi no hay androidboot.force_normal_boot=1 en la línea de comandos del kernel, el comando debe ajustarse como se indica a continuación para cambiar la ruta de acceso 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.cilAgrega un pie de página de AVB
Si la imagen que se pasa a --dst_bootimg se configura como una
partición encadenada de AVB, se debe agregar un pie de página de AVB después de ejecutar el repack_bootimg
comando.
Por ejemplo, antes de ejecutar repack_bootimg, ejecuta el siguiente comando para verificar si un vendor_boot-debug.img tiene un pie de página de AVB encadenado.
avbtool info_image --image vendor_boot-debug.imgSi 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. El uso de cualquier clave de prueba para firmar el
vendor_boot-debug.img funciona porque el ramdisk de depuración solo se puede usar cuando un
dispositivo está desbloqueado, lo que permite imágenes firmadas con claves que no son de lanzamiento en la boot o
vendor_boot partición.
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