Configurar recursos do kernel como módulos GKI

Esta página aborda como configurar um novo recurso do kernel como um módulo GKI ou configurar um recurso integrado existente do kernel como um módulo GKI.

Configure um novo recurso como um módulo GKI

  1. Para o novo recurso, edite gki_defconfig e defina o item de configuração do recurso de kernel necessário de n para m ( =m ). Defina esta configuração em arch/arm64/configs/gki_defconfig e arch/x86/configs/gki_defconfig .

  2. Adicione os arquivos KO ( .ko ) gerados para o recurso à seção COMMON_GKI_MODULES_LIST de common/modules.bzl . Adicione os arquivos em uma ordem classificada. Se você não tiver certeza de todos os arquivos gerados, a compilação falhará e listará todos os arquivos KO necessários para serem adicionados à lista.

  3. Adicione o mesmo conjunto de arquivos KO da etapa 2, classificados em ordem crescente para pesquisa binária em tempo de 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 protegidas para incluir aquelas do módulo recém-adicionado em common/android/abi_gki_protected_exports_{ARCH} usando tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64 . Os módulos designados como módulos GKI protegidos ainda precisam ser aprovados pelo Google para serem módulos protegidos oficialmente.

  4. Certifique-se de que os arquivos KO recém-adicionados da etapa 2 sejam copiados para out/<androidX-YZ>/dist/system_dlkm.img e out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz . Módulos no arquivo system_dlkm_staging_archive.tar.gz podem ser usados ​​como entrada para gerar o system_dlkm.img na construção da plataforma.

  5. Envie suas alterações para revisão. Os módulos GKI são um recurso de kernel exclusivo do Android, portanto, os patches de conversão de módulo não precisam ser enviados ao upstream. No entanto, você deve seguir outras diretrizes para enviar patches do Android Common Kernel (ACK) .

Configure um recurso integrado do kernel como um módulo GKI

  1. Para um recurso integrado do kernel existente, edite gki_defconfig e defina o item de configuração do recurso do kernel necessário de y para m ( =m ). Defina esta configuração em arch/arm64/configs/gki_defconfig e arch/x86/configs/gki_defconfig .

  2. Adicione os arquivos KO ( .ko ) gerados para o recurso à seção COMMON_GKI_MODULES_LIST de common/modules.bzl . Adicione os arquivos em uma ordem classificada. Se você não tiver certeza de todos os arquivos gerados, a compilação falhará e listará todos os arquivos KO necessários para serem adicionados à lista.

  3. Adicione o mesmo conjunto de arquivos KO da etapa 2, classificados em ordem crescente para pesquisa binária em tempo de 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 protegidas para incluir aquelas do módulo recém-adicionado em common/android/abi_gki_protected_exports_{ARCH} usando tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64 . Os módulos designados como módulos GKI protegidos ainda precisam ser aprovados pelo Google para serem módulos protegidos oficialmente.

  4. Certifique-se de que os arquivos KO do módulo recém-convertidos da etapa 2 sejam copiados para out/<androidX-YZ>/dist/system_dlkm.img e out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz . Módulos no arquivo system_dlkm_staging_archive.tar.gz podem ser usados ​​como entrada para gerar o system_dlkm.img na construção da plataforma.

  5. Envie suas alterações para revisão. Os módulos GKI são um recurso de kernel exclusivo do Android, portanto, os patches de conversão de módulo não precisam ser enviados ao upstream. No entanto, você deve seguir as outras diretrizes para enviar patches do Android Common Kernel (ACK) .

Converter um módulo GKI protegido em desprotegido

  1. Remova o módulo que está sendo convertido de protegido para desprotegido da lista de módulos protegidos em common/android/gki_protected_modules .

  2. Atualize a lista de exportações protegidas para excluir aquelas do módulo desprotegido recém-convertido em common/android/abi_gki_protected_exports_{ARCH} usando tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64 .

  3. Envie suas alterações para revisão. Os módulos GKI são um recurso de kernel exclusivo do Android, portanto, os patches de conversão de módulo não precisam ser enviados ao upstream. No entanto, você deve seguir as outras diretrizes para enviar patches do Android Common Kernel (ACK) .

Guia rápido de 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, atualizar a 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 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 esta 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.