Esta página cubre cómo configurar una nueva característica del kernel como un módulo GKI o configurar una característica del kernel integrada existente como un módulo GKI.
Configurar una nueva función como módulo GKI
Para la nueva característica, edite
gki_defconfig
y configure el elemento de configuración de la característica del kernel requerida den
am
(=m
). Establezca esta configuración tanto enarch/arm64/configs/gki_defconfig
comoarch/x86/configs/gki_defconfig
.Agregue los archivos KO (
.ko
) generados para la función a la secciónCOMMON_GKI_MODULES_LIST
decommon/modules.bzl
. Agregue los archivos en orden ordenado. Si no está seguro de todos los archivos generados, la compilación falla y enumera todos los archivos KO necesarios para agregarlos 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 módulo GKI protegido. Actualice la lista de exportaciones 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
paraaarch64
. 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 en el 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 exclusiva 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) .
Configurar una función incorporada del kernel como módulo GKI
Para una característica incorporada del kernel existente, edite
gki_defconfig
y configure el elemento de configuración de la característica del kernel requerida dey
am
(=m
). Establezca esta configuración tanto enarch/arm64/configs/gki_defconfig
comoarch/x86/configs/gki_defconfig
.Agregue los archivos KO (
.ko
) generados para la función a la secciónCOMMON_GKI_MODULES_LIST
decommon/modules.bzl
. Agregue los archivos en orden ordenado. Si no está seguro de todos los archivos generados, la compilación falla y enumera todos los archivos KO necesarios para agregarlos 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 módulo GKI protegido. Actualice la lista de exportaciones 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
paraaarch64
. 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 en el 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 exclusiva 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) .
Convertir un módulo GKI protegido a desprotegido
Elimine 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 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
paraaarch64
.Envíe sus cambios para su revisión. Los módulos GKI son una característica del kernel exclusiva 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 para la resolución de violaciones de símbolos de módulos GKI
Cuando los módulos sin firmar violan la protección de símbolos vigente para los módulos GKI, se pueden encontrar dos tipos de errores durante la carga del módulo, lo que resulta en fallas.
1. Módulo sin firmar que utiliza 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, la actualización de 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 module.ko
probablemente sea una versión personalizada sin firmar de ese módulo. Cuando module.ko
intenta exportar some_kernel_function
, que solo puede exportarse mediante un módulo GKI firmado, la carga falla y muestra este mensaje.
Resolución:
Esto se puede corregir utilizando la versión GKI del módulo que exporta some_kernel_function
, si el módulo sin firmar es una versión personalizada.