Esta página descreve como criar representações de ABI do kernel do Android e executar monitoramento de ABI. Ela se aplica ao Android 14 e mais alto. Para versões anteriores, consulte Versões mais antigas do kernel.
Consulte também a documentação de referência do Kleaf: Suporte ao monitoramento de ABI (GKI) (em inglês) e Suporte ao monitoramento de ABI (Dispositivo).
Criar o kernel e a representação de ABI dele
Depois de fazer o download das fontes de GKI execute o seguinte comando para criar o kernel de GKI e os artefatos da ABI:
tools/bazel run //common:kernel_aarch64_abi_dist
Esse comando compila a representação da ABI atual e a copia para o
out_abi/kernel_aarch64/dist/abi.stg
com o kernel e os módulos criados.
É possível especificar argumentos extras para as ferramentas da ABI no final do comando.
depois de --
. Por exemplo, para mudar o destino da ABI e dos artefatos de build,
pode usar a opção --dist_dir
:
tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist
Analisar as diferenças de ABI entre o build e uma representação de referência
O destino //common:kernel_aarch64_abi_dist
, executado no comando acima,
analisa e relata todas as diferenças de ABI encontradas entre o build e a referência
localizada em common/android/abi_gki_aarch64.stg
(definida no
BUILD.bazel
).
Essas diferenças são impressas no final do build, conforme mostrado no
exemplo a seguir:
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
O relatório impresso vem do artefato de build localizado em
out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short
junto com relatórios em
outros formatos.
A automação deve usar o código de saída do comando de compilação, que é diferente de zero as diferenças são encontradas.
Observe que
fase de desenvolvimento
ramificações, incluindo android-mainline
, não têm representação ABI de referência.
Sem ela, o //common:kernel_aarch64_abi_dist
não detecta diferenças.
Atualizar a representação da ABI de referência
Qualquer mudança que afete a ABI do kernel, como uma
atualização da lista de símbolos,
precisa ser refletido na representação da ABI de referência.
(common/android/abi_gki_aarch64.stg
, definido no
BUILD.bazel).
Para fazer isso, execute o seguinte comando:
tools/bazel run //common:kernel_aarch64_abi_update
Esse comando realiza tudo na etapa
Analise as diferenças da ABI e atualize também a
representação de referência nas origens. A ABI atualizada pode ser carregada em
o mesmo commit que a alteração. Inclua as diferenças da ABI da
relatar em $DIST_DIR/abi.report.short
na mensagem de confirmação.
Monitoramento de ABI e destinos de dispositivo
O monitoramento de ABI só precisa ser configurado para os principais destinos de build do kernel. Misto
configurações de build (que definem base_kernel
) que são compiladas diretamente com
o kernel de GKI só precisa adicionar suporte para rastrear o símbolo do dispositivo
lista.
A definição da ABI precisa ser atualizada usando o build GKI.
Consulte também a documentação de referência do Kleaf: Suporte ao monitoramento de ABI (Dispositivo).
Versões mais antigas do kernel
Android 13
As instruções de criação são basicamente as mesmas
Android 14, exceto que o formato ABI é XML e
a representação da ABI de referência será common/android/abi_gki_aarch64.xml
.
Android 13 e versões anteriores
Assim como no Android 13, o formato ABI é XML.
Os kernels mais antigos usam build.sh
em vez do Kleaf. Para monitoramento de ABI, use
build_abi.sh
, que aceita as mesmas variáveis de ambiente para personalizar o
criar como build.sh
. Exemplo:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
Isso cria o kernel e extrai a representação da ABI para o OUT_DIR
(que é out_abi
por padrão) e é equivalente aos
Destino //common:kernel_aarch64_abi_dist
do Kleaf (consulte
Crie artefatos de kernel e ABI).
A representação da ABI de referência é armazenada em android/abi_gki_aarch64.xml
como
definido pela variável ABI_DEFINITION
em common/build.config.gki.aarch64
.
Se você precisar atualizar a representação ABI do kernel, a maneira mais conveniente é
para usar as opções --update
e --print-report
:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report
O --print-report
mostra as diferenças de ABI entre o arquivo atual.
e uma ABI recém-gerada.
A opção --update
substitui a representação da ABI de referência. Ela também faz
as
atualização da lista de símbolos
ao usar BUILD_CONFIG
em um dispositivo com KMI_SYMBOL_LIST
configurado.