O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Teste VTS com Debug Ramdisk

Desde Android 10, o sistema genérico Imagem (GSI) usado para executar CTS-on-GSI / VTS testes de conformidade mudou de userdebug para o usuário tipo de compilação, a fim de ser assinado liberação. Este é um problema para o teste VTS porque VTS requer adb root para executar, mas adb root não está disponível em um dispositivo de construção usuário.

O ramdisk depuração (ou a imagem de inicialização de depuração) é introduzido para permitir adb root em um dispositivo de construção utilizador cujo bootloader é desbloqueado . Isto simplifica o fluxo de testes usando a mesma compilação utilizador GSI system.img para CTS-em-GSI e VTS-em-GSI. Para a configuração STS, usando outro userdebug OEM system.img ainda é necessária.

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

Suíte de teste Teste com Construir Depurar ramdisk adb root? Android 9 - alteração de variante de versão> 10
CTS Sistema OEM do utilizador N N Sem mudança
CTS-on-GSI GSI do utilizador N N

userdebug -> usuário GSI

liberação assinada

STS Sistema OEM userdebug N Y Novo no Q
VTS GSI do utilizador Y Y

userdebug -> usuário GSI

liberação assinada

Visão geral

Esses arquivos de imagem adicionais são gerados sob a pasta de compilação ( ${ANDROID_PRODUCT_OUT} ):

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

Quando boot-debug.img pisca para a boot da partição do dispositivo, a versão userdebug do arquivo sepolicy sistema e um arquivo de propriedade adicional, adb_debug.prop , são carregados. Isso permite adb root com a compilação de usuário system.img (ou GSI de ou o OEM).

Para kernel genérico Imagem (GKI) usando dispositivos que têm um vendor_boot partição, boot-debug.img não deve ser brilhou, como a boot partição deve ser brilhou com uma imagem GKI certificada. Em vez disso vendor_boot-debug.img deve ser flashed na vendor_boot partição, a fim de facilitar a depuração disco RAM.

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

O ramdisk de depuração é fornecido pelo OEM que executa os testes de conformidade. Ele não deve ser liberado 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 verdade
  • skip_initramfs em 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 2021/09/29, ramdisks depuração já não necessitam de atualização com o repack_bootimg ferramenta. Android 12 GSI compilação após SGR1.210929.001 (7777720) incorpora o up-to-date userdebug_plat_sepolicy.cil arquivo em seu system.img e ignora userdebug_plat_sepolicy.cil do ramdisk depuração. Veja as CLs para detalhes.

Android 11 GSI

Quando o boot-debug.img ou vendor_boot-debug.img é usado, o sepolicy sistema é carregado a partir do userdebug_plat_sepolicy.cil arquivo no disco em memória de depuração do boot-debug.img ou vendor_boot-debug.img . Para inicializar as imagens GSI, por favor, sempre incorporar mudanças sepolicy up-to-date do android11-gsi ramo de reconstruir o seu boot-debug.img ou vendor_boot-debug.img .

Alternativamente, o repack_bootimg ferramenta poderia ser usada para reconstruir um boot-debug.img ou vendor_boot-debug.img com atualizados sepolicy GSI.

Reempacotando um ramdisk de depuração

Em vez de incorporar mudanças 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 usa GKI).

As etapas são as seguintes:

  1. Baixar otatools.zip de https://ci.android.com . Recomendamos o descarregamento dos artefatos de construção de aosp_arm64-userdebug sobre aosp-master .

  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 o userdebug_plat_sepolicy.cil ou boot-with-debug-ramdisk-${KERNEL_VERSION}.img da compilação GSI você está usando. Por exemplo, se você estiver usando um arm64 GSI de RJR1.211020.001 (7840830) , faça o download a partir https://ci.android.com/builds/submitted/ 7840830 / aosp_arm64 pelo usuário / latest .

  4. Atualizar 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 pode ser ajustada de acordo com as configurações de dispositivos. Veja a próxima seção para explicação detalhada.

Caminho da sepolítica userdebug

O acima repack_bootimg arquivo cópias userdebug_plat_sepolicy.cil do ramdisk de --src_bootimg ao 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 é userdebug_plat_sepolicy.cil .

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

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

A partir de Android 12, o caminho dentro de um disco em memória 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 em 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
Específico do dispositivo vendor_boot-debug.img N / D Depende de force_normal_boot userdebug_plat_sepolicy.cil

Você pode especificar --ramdisk_add para copiar arquivos de e para diferentes caminhos com uma lista de src_path:dst_path pares. Por exemplo, apresentar as seguintes cópias de comando 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, em seguida, o comando deve ser ajustada conforme a seguir 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 transmitida para --dst_bootimg está configurado como um encadeado-AVB partição, um rodapé AVB precisa ser adicionado após a execução do repack_bootimg comando.

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

avbtool info_image --image vendor_boot-debug.img

Se ele originalmente tem um rodapé AVB acorrentado, um rodapé AVB precisa ser adicionado após a execução do repack_bootimg comando. O uso de qualquer chave de teste para assinar os vendor_boot-debug.img obras porque o disco RAM de depuração só pode ser usado quando um dispositivo é desbloqueado, permitindo-chave não-liberação imagens assinados na boot ou vendor_boot partição.

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