Teste de VTS com ramdisk de depuração

Desde o Android 10, a imagem genérica do sistema (GSI) usada para executar testes de conformidade CTS-on-GSI/VTS mudou de userdebug para tipo de compilação do usuário para ser assinada pela versão. Este é um problema para testes VTS porque o VTS requer adb root para ser executado, mas adb root não está disponível em um dispositivo de compilação do usuário.

O ramdisk de depuração (ou imagem de inicialização de depuração) é introduzido para habilitar adb root em um dispositivo de compilação do usuário cujo carregador de inicialização está desbloqueado . Isso simplifica o fluxo de teste usando o mesmo GSI system.img de compilação do usuário para CTS-on-GSI e VTS-on-GSI. Para configuração do STS, ainda é necessário usar outro userdebug OEM system.img .

A tabela a seguir mostra alterações de imagem e tipo de build para testes de conformidade no Android 10.

Suíte de teste Teste com Construir Depurar disco RAM raiz do adb? Mudança na variante de compilação do Android 9 -> 10
CTS Sistema OEM do utilizador N N Sem alteração
CTS-on-GSI GSI do utilizador N N

userdebug -> usuário GSI

liberação assinada

STS Sistema OEM depuração do usuário N S Novidade em Q
VTS GSI do utilizador S S

userdebug -> usuário GSI

liberação assinada

Visão geral

Esses arquivos de imagem adicionais são gerados na pasta de construção ( ${ANDROID_PRODUCT_OUT} ):

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

Quando boot-debug.img é atualizado na partição boot do dispositivo, a versão userdebug do arquivo sepolicy do sistema e um arquivo de propriedades adicional, adb_debug.prop , são carregados. Isso permite adb root com o usuário construir system.img (seja GSI ou OEM).

Para imagem genérica do kernel (GKI) usando dispositivos que possuem uma partição vendor_boot , boot-debug.img não deve ser atualizado, pois a partição boot deve ser atualizada com uma imagem GKI certificada. Em vez disso, vendor_boot-debug.img deve ser atualizado na partição vendor_boot para facilitar a depuração do ramdisk.

Pré-requisitos para usar um ramdisk de depuração

O ramdisk de depuração é fornecido pelo OEM que executa os testes de conformidade. Não deve ter assinatura de liberação e só pode ser usado se o dispositivo estiver desbloqueado.

O ramdisk de depuração não será gerado ou usado para atualizar dispositivos com:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE verdadeiro
  • skip_initramfs na linha de comando do kernel

Android 12 GSI

Nenhuma instrução adicional é necessária para usar o ramdisk de depuração com Android 12 GSI.

A partir de 29/09/2021, ramdisks de depuração não requerem mais atualização com a ferramenta repack_bootimg . A versão GSI do Android 12 após SGR1.210929.001 (7777720) incorpora o arquivo userdebug_plat_sepolicy.cil atualizado em seu system.img e ignora userdebug_plat_sepolicy.cil do ramdisk de depuração. Consulte os CLs para obter detalhes.

Android 11 GSI

Quando boot-debug.img ou vendor_boot-debug.img é usado, a sepolicy do sistema é carregada do arquivo userdebug_plat_sepolicy.cil no ramdisk de depuração de boot-debug.img ou vendor_boot-debug.img . Para inicializar imagens GSI, sempre incorpore alterações atualizadas da sepolicy da ramificação android11-gsi para reconstruir seu boot-debug.img ou vendor_boot-debug.img .

Alternativamente, a ferramenta repack_bootimg pode ser usada para reconstruir um boot-debug.img ou vendor_boot-debug.img com sepolicy GSI atualizada.

Reembalar um ramdisk de depuração

Em vez de incorporar alterações de sepolicy para reconstruir boot-debug.img , os parceiros podem usar repack_bootimg para atualizar o arquivo sepolicy GSI em boot-debug.img (ou vendor_boot-debug.img se o dispositivo usar GKI).

As etapas são as seguintes:

  1. Baixe otatools.zip em https://ci.android.com . Recomendamos fazer download dos artefatos de construção de aosp_arm64-userdebug em aosp-main .

  2. Configure o ambiente de execução para repack_bootimg :

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. Baixe userdebug_plat_sepolicy.cil ou boot-with-debug-ramdisk-${KERNEL_VERSION}.img da compilação GSI que você está usando. Por exemplo, se você estiver usando um GSI arm64 de RJR1.211020.001 (7840830) , faça download em https://ci.android.com/builds/submitted/ 7840830 /aosp_arm64-user/latest .

  4. Atualize o dispositivo boot-debug.img ou vendor_boot-debug.img com 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
    

    Com 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
    

    Os argumentos de --ramdisk_add podem ser ajustados de acordo com as configurações do dispositivo. Consulte a próxima seção para obter uma explicação detalhada.

Caminho da sepolicy userdebug

O repack_bootimg acima copia o arquivo userdebug_plat_sepolicy.cil do ramdisk de --src_bootimg para o ramdisk de --dst_bootimg . No entanto, o caminho dentro de um ramdisk de depuração pode ser diferente em diferentes versões do Android. No Android 10 e 11, o caminho é first_stage_ramdisk/userdebug_plat_sepolicy.cil para dispositivos com androidboot.force_normal_boot=1 na linha de comando do kernel. Caso contrário, o caminho será userdebug_plat_sepolicy.cil .

Execute o seguinte comando para verificar se existe androidboot.force_normal_boot na linha de comando do kernel:

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

A partir do Android 12, o caminho dentro de um ramdisk de depuração é sempre userdebug_plat_sepolicy.cil , independentemente da existência de androidboot.force_normal_boot=1 na linha de comando do kernel. A tabela a seguir mostra os caminhos dentro de um ramdisk de depuração em diferentes versões do Android.

Imagem de depuração Android 10 Android 11 Android 12
GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img N / D first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
boot-debug.img específico do dispositivo Depende de force_normal_boot Depende de force_normal_boot userdebug_plat_sepolicy.cil
Vendor_boot-debug.img específico do dispositivo N / D Depende de force_normal_boot userdebug_plat_sepolicy.cil

Você pode especificar --ramdisk_add para copiar arquivos de e para caminhos diferentes com uma lista de pares src_path:dst_path . Por exemplo, o comando a seguir copia o arquivo first_stage_ramdisk/userdebug_plat_sepolicy.cil de um Android 11 boot-with-debug-ramdisk-5.4.img para first_stage_ramdisk/userdebug_plat_sepolicy.cil dentro de um Android 11 vendor_boot-debug.img .

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

Se não houver androidboot.force_normal_boot=1 na linha de comando do kernel, o comando deverá ser ajustado conforme abaixo para alterar o caminho de destino para 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

Se a imagem passada para --dst_bootimg estiver configurada como uma partição encadeada por AVB , um rodapé AVB precisará ser adicionado após executar o comando repack_bootimg .

Por exemplo, antes de executar repack_bootimg , execute o seguinte comando para verificar se vendor_boot-debug.img tem um rodapé AVB encadeado.

avbtool info_image --image vendor_boot-debug.img

Se originalmente tiver um rodapé AVB encadeado, um rodapé AVB precisará ser adicionado após executar o comando repack_bootimg . Usar qualquer chave de teste para assinar o vendor_boot-debug.img funciona porque o ramdisk de depuração só pode ser usado quando um dispositivo é desbloqueado, o que permite imagens assinadas com chave sem liberação na partição boot ou 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