Desde o Android 10, a imagem genérica do sistema (GSI) usada para executar o teste de conformidade CTS-on-GSI/VTS mudou de userdebug para user build type para ser assinada pela versão. Este é um problema para o teste VTS porque o VTS requer a execução do adb root
, mas o 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 o 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 a mesma compilação de usuário GSI system.img
para CTS-on-GSI e VTS-on-GSI. Para a configuração do STS, ainda é necessário usar outro userdebug OEM system.img
.
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 | raiz adb? | Android 9 -> 10 mudança de variante de compilação |
---|---|---|---|---|---|
CTS | sistema de OEM | do utilizador | N | N | Sem alteração |
CTS-on-GSI | GSI | do utilizador | N | N | userdebug -> usuário GSI lançamento assinado |
STS | sistema de OEM | userdebug | N | S | Novo em Q |
VTS | GSI | do utilizador | S | S | userdebug -> usuário GSI lançamento assinado |
Visão geral
Esses arquivos de imagem adicionais são gerados na pasta build ( ${ANDROID_PRODUCT_OUT}
):
-
boot-debug.img
-
vendor_boot-debug.img
Quando boot-debug.img
é atualizado na partição de boot
do dispositivo, a versão userdebug do arquivo de sepolicy do sistema e um arquivo de propriedade adicional, adb_debug.prop
, são carregados. Isso permite o adb root
com o usuário construir system.img
(seja GSI ou OEM).
Para Generic Kernel Image (GKI) usando dispositivos que possuem uma partição vendor_boot
, boot-debug.img
não deve ser atualizado, pois a partição de 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. Ele não deve ser assinado 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 o Android 12 GSI.
A partir de 29/09/2021, os ramdisks de depuração não precisam mais ser atualizados com a ferramenta repack_bootimg
. A compilação do Android 12 GSI 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 o 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 do boot-debug.img
ou vendor_boot-debug.img
. Para inicializar imagens GSI, sempre incorpore alterações de sepolicy atualizadas da ramificação android11-gsi
para reconstruir seu boot-debug.img
ou vendor_boot-debug.img
.
Como alternativa, a ferramenta repack_bootimg
pode ser usada para reconstruir um boot-debug.img
ou vendor_boot-debug.img
com sepolicy GSI atualizado.
Reempacotando 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 de sepolicy GSI em boot-debug.img
(ou vendor_boot-debug.img
se o dispositivo usar GKI).
Os passos são os seguintes:
Baixe
otatools.zip
em https://ci.android.com . Recomendamos fazer o download dos artefatos de compilação deaosp_arm64-userdebug
noaosp-master
.Configure o ambiente de execução para
repack_bootimg
:unzip otatools.zip -d otatools
export PATH="${PWD}/otatools/bin:${PATH}"
repack_bootimg --help
Faça download do
userdebug_plat_sepolicy.cil
ouboot-with-debug-ramdisk-${KERNEL_VERSION}.img
da compilação GSI que você está usando. Por exemplo, se você estiver usando um GSI arm64 deRJR1.211020.001 (7840830)
, faça o download em https://ci.android.com/builds/submitted/ 7840830 /aosp_arm64-user/latest .Atualize o dispositivo
boot-debug.img
ouvendor_boot-debug.img
comuserdebug_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 é 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 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 em um ramdisk de depuração em diferentes versões do Android.
Depurar imagem | 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
em 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
Adicionando um rodapé AVB
Se a imagem passada para --dst_bootimg
estiver configurada como uma partição encadeada por AVB , um rodapé AVB precisará ser adicionado após a execução do comando repack_bootimg
.
Por exemplo, antes de executar repack_bootimg
, execute o comando a seguir para verificar se um vendor_boot-debug.img
tem um rodapé AVB encadeado.
avbtool info_image --image vendor_boot-debug.img
Se ele tiver originalmente um rodapé AVB encadeado, um rodapé AVB precisa ser adicionado após a execução do comando repack_bootimg
. O uso de 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 está desbloqueado, o que permite imagens assinadas por chave sem lançamento 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