Desde Android 10, la imagen genérica del sistema (GSI) utilizada para ejecutar las pruebas de cumplimiento de CTS-on-GSI/VTS cambió de depuración de usuario a tipo de compilación de usuario para que se firmara la versión. Este 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 de usuario.
El ramdisk de depuración (o imagen de arranque de depuración) se introduce para habilitar adb root
en un dispositivo de compilación de usuario cuyo cargador de arranque está desbloqueado . Esto simplifica el flujo de prueba mediante el uso del mismo sistema GSI de compilación de system.img
para CTS-on-GSI y VTS-on-GSI. Para la configuración de STS, aún se requiere el uso de otro system.img
OEM de depuración de usuario.
En la siguiente tabla, se muestran los cambios de imagen y tipo de compilación para las pruebas de cumplimiento en Android 10.
Banco de pruebas | prueba con | Construir | Depurar ramdisk | raíz adb? | Cambio de variante de compilación de Android 9 -> 10 |
---|---|---|---|---|---|
CTS | sistema de OEM | usuario | norte | norte | Ningún cambio |
CTS en GSI | GSI | usuario | norte | norte | depuración de usuario -> usuario GSI liberación firmada |
STS | sistema de OEM | depuración de usuario | norte | Y | Nuevo en Q |
VTS | GSI | usuario | Y | Y | depuración de usuario -> usuario GSI liberación firmada |
Visión de conjunto
Estos archivos de imagen adicionales se generan en la carpeta de compilación ( ${ANDROID_PRODUCT_OUT}
):
-
boot-debug.img
-
vendor_boot-debug.img
Cuando boot-debug.img
se muestra en la partición de boot
del dispositivo, se cargan la versión de depuración del usuario del archivo sepolicy del sistema y un archivo de propiedades adicional, adb_debug.prop
. Esto permite que adb root
rootee con el usuario build system.img
(ya sea de GSI o de OEM).
Para la imagen de kernel genérica (GKI) que utiliza dispositivos que tienen una partición de arranque_proveedor, boot-debug.img
vendor_boot
debe actualizarse, ya que la partición de boot
debe actualizarse con una imagen GKI certificada. En su lugar vendor_boot-debug.img
debe actualizarse en la partición de vendor_boot
para facilitar la depuración de ramdisk.
Requisitos previos para usar un ramdisk de depuración
El disco RAM de depuración lo proporciona el OEM que ejecuta las pruebas de cumplimiento. No debe estar firmado y solo se puede usar si el dispositivo está desbloqueado.
El ramdisk de depuración no se generará ni se utilizará para actualizar dispositivos con:
-
BOARD_BUILD_SYSTEM_ROOT_IMAGE
verdadero -
skip_initramfs
en la línea de comando del kernel
Android 12 GSI
No se requieren instrucciones adicionales para usar ramdisk de depuración con Android 12 GSI.
A partir del 29/09/2021, los ramdisks de depuración ya no requieren actualización con la herramienta repack_bootimg
. La compilación GSI de Android 12 posterior SGR1.210929.001 (7777720)
incorpora el archivo userdebug_plat_sepolicy.cil
actualizado en su system.img
e ignora userdebug_plat_sepolicy.cil
del ramdisk de depuración. Consulte las CL para obtener más información.
Android 11 GSI
Cuando se usa boot-debug.img
o vendor_boot-debug.img
, la política de seguridad del sistema se carga 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 GSI, incorpore siempre los cambios actualizados en la política de seguridad de la rama android11-gsi
para reconstruir su boot-debug.img
o vendor_boot-debug.img
.
Como alternativa, la herramienta repack_bootimg
podría usarse para reconstruir boot-debug.img
o vendor_boot-debug.img
con la política de seguridad de GSI actualizada.
Reempaquetar un ramdisk de depuración
En lugar de incorporar cambios en la política de seguridad para reconstruir boot-debug.img
, los socios pueden usar repack_bootimg
para actualizar el archivo de política de seguridad de GSI en boot-debug.img
(o vendor_boot-debug.img
si el dispositivo usa GKI).
Los pasos son los siguientes:
Descargue
otatools.zip
desde https://ci.android.com . Recomendamos descargar desde los artefactos de compilación deaosp_arm64-userdebug
enaosp-master
.Configure el entorno de ejecución para
repack_bootimg
:unzip otatools.zip -d otatools
export PATH="${PWD}/otatools/bin:${PATH}"
repack_bootimg --help
Descargue
userdebug_plat_sepolicy.cil
oboot-with-debug-ramdisk-${KERNEL_VERSION}.img
de la compilación de GSI que está utilizando. Por ejemplo, si usa un GSI arm64 deRJR1.211020.001 (7840830)
, descárguelo desde https://ci.android.com/builds/submitted/ 7840830 /aosp_arm64-user/latest .Actualice el dispositivo
boot-debug.img
ovendor_boot-debug.img
conuserdebug_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 las configuraciones del dispositivo. Consulte la siguiente sección para obtener una explicación detallada.
Ruta de la política de depuración del usuario
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 puede ser diferente 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, la ruta es userdebug_plat_sepolicy.cil
.
Ejecute el siguiente comando para comprobar 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 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. La siguiente tabla muestra las rutas dentro de un ramdisk de depuración en diferentes versiones de Android.
Imagen de depuración | androide 10 | androide 11 | androide 12 |
---|---|---|---|
Arranque GKI con depuración-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 |
Puede especificar --ramdisk_add
para copiar archivos desde y hacia diferentes rutas 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.cil
Si no hay androidboot.force_normal_boot=1
en la línea de comando del kernel, entonces el comando debe ajustarse 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
Agregar un pie de página AVB
Si la imagen pasada a --dst_bootimg
está configurada como una partición en cadena AVB, se debe agregar un pie de página AVB después de ejecutar el comando repack_bootimg
.
Por ejemplo, antes de ejecutar repack_bootimg
, ejecute el siguiente comando para verificar si un vendor_boot-debug.img
tiene un pie de página AVB encadenado.
avbtool info_image --image vendor_boot-debug.img
Si originalmente tiene un pie de página AVB encadenado, se debe agregar un pie de página 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 clave sin liberación en la partición de 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