Esta página aborda como configurar um novo recurso do kernel como um módulo GKI ou configurar um recurso do kernel integrado como um módulo GKI.
Configurar um novo recurso como um módulo GKI
Para o novo recurso, edite
gki_defconfig
e defina o item de configuração necessário do recurso do kernel den
param
(=m
). Defina essa configuração emarch/arm64/configs/gki_defconfig
earch/x86/configs/gki_defconfig
.Adicione os arquivos KO (
.ko
) gerados para o recurso à seçãoCOMMON_GKI_MODULES_LIST
decommon/modules.bzl
. Adicione os arquivos em uma ordem de classificação. Se você não tiver certeza de todos os arquivos gerados, o build falhará e listará todos os arquivos KO necessários a serem adicionados à lista.Adicione o mesmo conjunto de arquivos KO da etapa 2, classificados em ordem crescente para pesquisa binária no momento da execução, a
common/android/gki_{ARCH}_protected_modules
para designar o módulo como um módulo GKI protegido. Atualize a lista de exportações que são protegidas para incluir as do módulo recém-adicionado nocommon/android/abi_gki_protected_exports_{ARCH}
usandotools/bazel run //common:kernel_aarch64_abi_update_protected_exports
paraaarch64
. Os módulos designados como GKI protegidos ainda precisam ser aprovados pelo Google para serem módulos protegidos oficiais.Verifique se os arquivos KO recém-adicionados na etapa 2 foram copiados para o
out/<androidX-Y.Z>/dist/system_dlkm.img
eout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
do kernel. Os módulos no arquivosystem_dlkm_staging_archive.tar.gz
podem ser usados como entrada para gerar osystem_dlkm.img
no build da plataforma.Envie as mudanças para revisão. Os módulos GKI são um recurso do kernel exclusivo do Android, portanto, não é necessário enviar patches de conversão de módulo upstream. No entanto, é necessário seguir outras diretrizes para enviar patches do kernel comum do Android (ACK).
Configurar um recurso integrado do kernel como um módulo GKI
Para um recurso do kernel integrado existente, edite
gki_defconfig
e defina o item de configuração do recurso do kernel necessário dey
param
(=m
). Defina essa configuração emarch/arm64/configs/gki_defconfig
earch/x86/configs/gki_defconfig
.Adicione os arquivos KO (
.ko
) gerados para o recurso à seçãoCOMMON_GKI_MODULES_LIST
docommon/modules.bzl
. Adicione os arquivos em ordem classificada. Se você não tiver certeza de todos os arquivos gerados, o build vai falhar e listar todos os arquivos KO necessários para serem adicionados à lista.Adicione o mesmo conjunto de arquivos KO da etapa 2, classificados em ordem crescente para pesquisa binária no momento da execução, a
common/android/gki_{ARCH}_protected_modules
para designar o módulo como um módulo GKI protegido. Atualize a lista de exportações que são protegidas para incluir as do módulo recém-adicionado nocommon/android/abi_gki_protected_exports_{ARCH}
usandotools/bazel run //common:kernel_aarch64_abi_update_protected_exports
paraaarch64
. Os módulos designados como GKI protegidos ainda precisam ser aprovados pelo Google para serem módulos protegidos oficiais.Verifique se os arquivos KO do módulo recém-convertidos da etapa 2 foram copiados para o
out/<androidX-Y.Z>/dist/system_dlkm.img
eout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
do kernel. Os módulos no arquivosystem_dlkm_staging_archive.tar.gz
podem ser usados como entrada para gerar osystem_dlkm.img
no build da plataforma.Envie as mudanças para revisão. Os módulos GKI são um recurso do kernel exclusivo do Android, portanto, não é necessário enviar patches de conversão de módulo upstream. No entanto, é necessário seguir as outras diretrizes para enviar patches do kernel comum do Android (ACK, na sigla em inglês).
Converter um módulo GKI protegido em desprotegido
Remova o módulo que está sendo convertido de protegido para não protegido da lista de módulos protegidos em
common/android/gki_protected_modules
.Atualize a lista de exportações protegidas para excluir aquelas do módulo desprotegido recém-convertido no
common/android/abi_gki_protected_exports_{ARCH}
usandotools/bazel run //common:kernel_aarch64_abi_update_protected_exports
paraaarch64
.Envie suas mudanças para revisão. Os módulos GKI são um recurso do kernel exclusivo do Android, portanto, não é necessário enviar patches de conversão de módulo upstream. No entanto, é necessário seguir as outras diretrizes para enviar patches do kernel comum do Android (ACK, na sigla em inglês).
Guia rápido para resolução de violação de símbolo de módulos GKI
Quando módulos não assinados violam a proteção de símbolos em vigor para módulos GKI, dois tipos de erros podem ser encontrados durante o carregamento do módulo, resultando em falha.
1. Módulo não assinado usando o símbolo protegido
Erro:
module: Protected symbol: some_kernel_function (err -13)
Causa:
O arquivo module.ko
é um módulo de fornecedor não assinado e tenta resolver o
símbolo exportado do módulo GKI some_kernel_function
durante o carregamento, sem
ser listado na lista de símbolos do fornecedor.
Resolução:
Se module.ko
não for um módulo GKI protegido, a atualização da lista de símbolos vai
resolver o erro incluindo some_kernel_function
na lista de símbolos de fornecedores.
Como alternativa, use a versão do GKI de module.ko
.
2. Módulo não assinado que exporta o símbolo protegido
Erro:
module: exports protected symbol some_kernel_function
Causa:
O módulo que exporta o some_kernel_function
é um módulo GKI protegido, e
o module.ko
provavelmente é uma versão personalizada não assinada desse módulo. Quando
module.ko
tenta exportar some_kernel_function
, que só pode ser exportado
por um módulo GKI assinado, o carregamento falha com esta mensagem.
Resolução:
Isso pode ser corrigido usando a versão do GKI do módulo que exporta
some_kernel_function
, se o módulo não assinado for uma versão personalizada.