Esta página cubre cómo configurar una nueva función de kernel como un módulo GKI o configurar una función de kernel integrada existente como un módulo GKI.
Configurar una nueva característica como un módulo GKI
Para la nueva función, edite
gki_defconfig
y configure el elemento de configuración de la función del kernel requerido den
am
(=m
). Establezca esta configuración enarch/arm64/configs/gki_defconfig
yarch/x86/configs/gki_defconfig
.Agregue los archivos KO (
.ko
) generados para la característica a la secciónCOMMON_GKI_MODULES_LIST
decommon/modules.bzl
. Agregue los archivos en un orden ordenado. Si no está seguro de todos los archivos generados, la compilación falla y enumera todos los archivos KO necesarios para agregar a la lista.Agregue el mismo conjunto de archivos KO del paso 2, ordenados en orden ascendente para la búsqueda binaria en tiempo de ejecución, a
common/android/gki_{ARCH}_protected_modules
para designar el módulo como un módulo GKI protegido. Actualice la lista de exportaciones que están protegidas para incluir las del módulo recién agregado encommon/android/abi_gki_protected_exports_{ARCH}
usandotools/bazel run //common:kernel_aarch64_abi_update_protected_exports
foraarch64
. Los módulos designados como módulos GKI protegidos aún deben ser aprobados por Google para ser módulos protegidos oficiales.Asegúrese de que los archivos KO recién agregados del paso 2 se copien en el kernel
out/<androidX-YZ>/dist/system_dlkm.img
yout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz
. Los módulos del archivosystem_dlkm_staging_archive.tar.gz
se pueden usar como entrada para generarsystem_dlkm.img
en la compilación de la plataforma.Envíe sus cambios para su revisión. Los módulos GKI son una característica del kernel solo de Android, por lo que no es necesario enviar parches de conversión de módulos en sentido ascendente. Sin embargo, debe seguir otras pautas para enviar parches de Android Common Kernel (ACK) .
Configure una característica integrada del kernel como un módulo GKI
Para una función de kernel integrada existente, edite
gki_defconfig
y establezca el elemento de configuración de la función de kernel requerida dey
am
(=m
). Establezca esta configuración enarch/arm64/configs/gki_defconfig
yarch/x86/configs/gki_defconfig
.Agregue los archivos KO (
.ko
) generados para la característica a la secciónCOMMON_GKI_MODULES_LIST
decommon/modules.bzl
. Agregue los archivos en un orden ordenado. Si no está seguro de todos los archivos generados, la compilación falla y enumera todos los archivos KO necesarios para agregar a la lista.Agregue el mismo conjunto de archivos KO del paso 2, ordenados en orden ascendente para la búsqueda binaria en tiempo de ejecución, a
common/android/gki_{ARCH}_protected_modules
para designar el módulo como un módulo GKI protegido. Actualice la lista de exportaciones que están protegidas para incluir las del módulo recién agregado encommon/android/abi_gki_protected_exports_{ARCH}
usandotools/bazel run //common:kernel_aarch64_abi_update_protected_exports
foraarch64
. Los módulos designados como módulos GKI protegidos aún deben ser aprobados por Google para ser módulos protegidos oficiales.Asegúrese de que los archivos KO del módulo recién convertidos del paso 2 se copien en el kernel
out/<androidX-YZ>/dist/system_dlkm.img
yout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz
. Los módulos del archivosystem_dlkm_staging_archive.tar.gz
se pueden usar como entrada para generarsystem_dlkm.img
en la compilación de la plataforma.Envíe sus cambios para su revisión. Los módulos GKI son una característica del kernel solo de Android, por lo que no es necesario enviar parches de conversión de módulos en sentido ascendente. Sin embargo, debe seguir las otras pautas para enviar parches de Android Common Kernel (ACK) .
Convierta un módulo GKI protegido en desprotegido
Quite el módulo que se está convirtiendo de protegido a desprotegido de la lista de módulos protegidos en
common/android/gki_protected_modules
.Actualice la lista de exportaciones que están protegidas para excluir las del módulo desprotegido recién convertido en
common/android/abi_gki_protected_exports_{ARCH}
usandotools/bazel run //common:kernel_aarch64_abi_update_protected_exports
foraarch64
.Envíe sus cambios para su revisión. Los módulos GKI son una característica del kernel solo de Android, por lo que no es necesario enviar parches de conversión de módulos en sentido ascendente. Sin embargo, debe seguir las otras pautas para enviar parches de Android Common Kernel (ACK) .
Guía rápida de resolución de infracciones de símbolos de módulos GKI
Cuando los módulos sin firmar infringen la protección de símbolos establecida para los módulos GKI, se pueden encontrar dos tipos de errores durante la carga del módulo, lo que resulta en una falla.
1. Módulo sin firmar usando el símbolo protegido
Error:
module: Protected symbol: some_kernel_function (err -13)
Causa:
El archivo module.ko
es un módulo de proveedor sin firmar e intenta resolver el símbolo exportado del módulo GKI some_kernel_function
durante la carga, sin aparecer en la lista de símbolos de proveedores.
Resolución:
Si module.ko
no es un módulo GKI protegido, actualizar la lista de símbolos resolverá el error al incluir some_kernel_function
en la lista de símbolos del proveedor. Alternativamente, use la versión GKI de module.ko
.
2. Módulo sin firmar que exporta el símbolo protegido
Error:
module: exports protected symbol some_kernel_function
Causa:
El módulo que exporta some_kernel_function
es un módulo GKI protegido, y es probable que module.ko
sea una versión personalizada sin firmar de ese módulo. Cuando module.ko
intenta exportar some_kernel_function
, que solo puede ser exportado por un módulo GKI firmado, la carga falla con este mensaje.
Resolución:
Esto se puede corregir usando la versión GKI del módulo que exporta some_kernel_function
, si el módulo sin firmar es una versión personalizada.