Esta página aborda como configurar um novo recurso do kernel como um módulo GKI ou configurar um recurso integrado do kernel como um módulo GKI.
Configurar um novo recurso como um módulo GKI
Para o novo recurso, edite
gki_defconfige defina o item de configuração do recurso do kernel necessário denparam(=m). Defina essa configuração emarch/arm64/configs/gki_defconfigearch/x86/configs/gki_defconfig.Adicione os arquivos KO (
.ko) gerados para o recurso à seção_COMMON_GKI_MODULES_LISTdo arquivo a seguir. 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.- No
android17-6.18e versões mais recentes, adicione itens acommon/bazel/modules_private.bzl. - No
android16-6.12e versões anteriores, adicione itens acommon/modules.bzl.
- No
Para o Android 14, adicione o mesmo conjunto de arquivos KO da etapa 2, classificados em ordem crescente para pesquisa binária no tempo de execução, a
common/android/gki_{ARCH}_protected_modulespara designar o módulo como um módulo GKI protegido.Para o Android 14 e 15, atualize a lista de exportações para incluir as exportações recém-adicionadas em
common/android/abi_gki_protected_exports_ARCHITECTURE. Por exemplo, para atualizar a lista, executetools/bazel run //common:kernel_aarch64_abi_update_protected_exportsparaaarch64.Verifique se os arquivos KO recém-adicionados da etapa 2 foram copiados para
out/<androidX-Y.Z>/dist/system_dlkm.imgeout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzdo kernel. Os módulos no arquivosystem_dlkm_staging_archive.tar.gzpodem ser usados como entrada para gerar osystem_dlkm.imgno build da plataforma.Envie as mudanças para revisão. Os módulos GKI são um recurso do kernel exclusivo do Android. Portanto, os patches de conversão de módulos não precisam ser enviados para o upstream. No entanto, você precisa 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 integrado do kernel, edite
gki_defconfige defina o item de configuração do recurso do kernel necessário deyparam(=m). Defina essa configuração emarch/arm64/configs/gki_defconfigearch/x86/configs/gki_defconfig.Adicione os arquivos KO (
.ko) gerados para o recurso à seção_COMMON_GKI_MODULES_LISTdo arquivo a seguir. 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.- No
android17-6.18e versões mais recentes, adicione itens acommon/bazel/modules_private.bzl. - No
android16-6.12e versões anteriores, adicione itens a `common/modules.bzl.
- No
Para o Android 14, adicione o mesmo conjunto de arquivos KO da etapa 2, classificados em ordem crescente para pesquisa binária no tempo de execução, a
common/android/gki_{ARCH}_protected_modulespara designar o módulo como um módulo GKI protegido.Para o Android 14 e 15, atualize a lista de exportações protegidas para incluir as do módulo recém-adicionado em
common/android/abi_gki_protected_exports_{ARCH}usandotools/bazel run //common:kernel_aarch64_abi_update_protected_exportsparaaarch64.Verifique se os arquivos KO do módulo recém-convertido da etapa 2 foram copiados para o kernel
out/<androidX-Y.Z>/dist/system_dlkm.imgeout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz. Os módulos no arquivosystem_dlkm_staging_archive.tar.gzpodem ser usados como entrada para gerar osystem_dlkm.imgno build da plataforma.Envie as mudanças para revisão. Os módulos GKI são um recurso do kernel exclusivo do Android. Portanto, os patches de conversão de módulos não precisam ser enviados para o upstream. No entanto, você precisa seguir as outras diretrizes para enviar patches do kernel comum do Android (ACK).
Converter um módulo GKI protegido para desprotegido
Para o Android 15 e versões mais recentes, adicione o módulo que está sendo convertido de protegido para desprotegido à lista
_COMMON_UNPROTECTED_MODULES_LISTno arquivo a seguir:- No
android17-6.18e versões mais recentes, adicione itens acommon/bazel/modules_private.bzl. - No
android16-6.12e versões anteriores, adicione itens acommon/modules.bzl.
- No
Para o Android 14, remova o módulo que está sendo convertido de protegido para desprotegido da lista de módulos protegidos em
common/android/gki_protected_modules.Para o Android 14 e 15, atualize a lista de exportações protegidas para excluir as do módulo desprotegido recém-convertido em
common/android/abi_gki_protected_exports_{ARCH}usandotools/bazel run //common:kernel_aarch64_abi_update_protected_exportsparaaarch64.Envie as mudanças para revisão. Os módulos GKI são um recurso do kernel exclusivo do Android. Portanto, os patches de conversão de módulos não precisam ser enviados para o upstream. No entanto, você precisa seguir as outras diretrizes para enviar patches do kernel comum do Android (ACK).
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 resolverá o erro incluindo some_kernel_function na lista de símbolos do fornecedor.
Como alternativa, use a versão GKI de module.ko.
2. Módulo não assinado exportando 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 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 essa mensagem.
Resolução :
Isso pode ser corrigido usando a versão GKI do módulo que exporta some_kernel_function, se o módulo não assinado for uma versão personalizada.