En esta página, se explica cómo configurar una nueva función del kernel como un módulo de GKI o cómo configurar una función integrada existente del kernel como un módulo de GKI.
Cómo configurar una nueva función como módulo de GKI
Para la nueva función, edita
gki_defconfig
y establece el elemento de configuración de la función del kernel requerida den
am
(=m
). Establece este parámetro de configuración enarch/arm64/configs/gki_defconfig
yarch/x86/configs/gki_defconfig
.Agrega los archivos de KO (
.ko
) generados para la función a la secciónCOMMON_GKI_MODULES_LIST
decommon/modules.bzl
. Agrega los archivos en orden. Si no tienes certeza de todos los archivos generados, la compilación fallará y se enumerarán todos los archivos .ko necesarios que se deben agregar a la lista.En Android 14, agrega el mismo conjunto de archivos KO del paso 2, ordenados de forma ascendente para la búsqueda binaria en el tiempo de ejecución, a
common/android/gki_{ARCH}_protected_modules
para designar el módulo como un módulo de GKI protegido.En Android 14 y 15, actualiza la lista de exportaciones para que incluya las exportaciones agregadas recientemente en
common/android/abi_gki_protected_exports_ARCHITECTURE
. Por ejemplo, para actualizar la lista, ejecutatools/bazel run //common:kernel_aarch64_abi_update_protected_exports
paraaarch64
.Asegúrate de que los archivos .ko agregados recientemente en el paso 2 se copien en
out/<androidX-Y.Z>/dist/system_dlkm.img
yout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
del kernel. Los módulos del archivosystem_dlkm_staging_archive.tar.gz
se pueden usar como entrada para generar elsystem_dlkm.img
en la compilación de la plataforma.Envía los cambios para su revisión. Los módulos de GKI son una función del kernel exclusiva de Android, por lo que no es necesario enviar parches de conversión de módulos upstream. Sin embargo, debes seguir otros lineamientos para enviar parches del kernel común de Android (ACK).
Configura una función integrada del kernel como un módulo de GKI
Para una función del kernel integrada existente, edita
gki_defconfig
y configura el elemento de configuración de la función del kernel requerida dey
am
(=m
). Establece este parámetro de configuración enarch/arm64/configs/gki_defconfig
yarch/x86/configs/gki_defconfig
.Agrega los archivos de KO (
.ko
) generados para la función a la secciónCOMMON_GKI_MODULES_LIST
decommon/modules.bzl
. Agrega los archivos en orden. Si no tienes certeza de todos los archivos generados, la compilación fallará y se enumerarán todos los archivos .ko necesarios que se deben agregar a la lista.En Android 14, agrega el mismo conjunto de archivos .ko del paso 2, ordenados de forma ascendente para la búsqueda binaria en el tiempo de ejecución, a
common/android/gki_{ARCH}_protected_modules
para designar el módulo como un módulo de GKI protegido.En Android 14 y 15, actualiza la lista de exportaciones protegidas para incluir las del módulo agregado recientemente en
common/android/abi_gki_protected_exports_{ARCH}
contools/bazel run //common:kernel_aarch64_abi_update_protected_exports
paraaarch64
.Asegúrate de que los archivos KO del módulo recién convertido del paso 2 se copien en
out/<androidX-Y.Z>/dist/system_dlkm.img
yout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
del kernel. Los módulos del archivosystem_dlkm_staging_archive.tar.gz
se pueden usar como entrada para generar elsystem_dlkm.img
en la compilación de la plataforma.Envía los cambios para su revisión. Los módulos de GKI son una función del kernel exclusiva de Android, por lo que no es necesario enviar parches de conversión de módulos upstream. Sin embargo, debes seguir los otros lineamientos para enviar parches del kernel común de Android (ACK).
Cómo convertir un módulo de GKI protegido en uno no protegido
En Android 15 y versiones posteriores, agrega el módulo que se convierte de protegido a no protegido a la lista
COMMON_UNPROTECTED_MODULES_LIST
en el archivocommon/modules.bzl
.En Android 14, quita el módulo que se convierte de protegido a no protegido de la lista de módulos protegidos en
common/android/gki_protected_modules
.En Android 14 y 15, actualiza la lista de exportaciones protegidas para excluir las del módulo no protegido recién convertido en
common/android/abi_gki_protected_exports_{ARCH}
contools/bazel run //common:kernel_aarch64_abi_update_protected_exports
paraaarch64
.Envía los cambios para su revisión. Los módulos de GKI son una función del kernel exclusiva de Android, por lo que no es necesario enviar parches de conversión de módulos upstream. Sin embargo, debes seguir los otros lineamientos para enviar parches del kernel común de Android (ACK).
Guía rápida para resolver incumplimientos de símbolos de módulos de GKI
Cuando los módulos sin firmar incumplen la protección de símbolos establecida para los módulos de GKI, se pueden producir dos tipos de errores durante la carga de módulos, lo que genera una falla.
1. Módulo sin firmar que usa el símbolo protegido
Error:
module: Protected symbol: some_kernel_function (err -13)
Causa:
El archivo module.ko
es un módulo del proveedor sin firmar y trata de resolver el símbolo some_kernel_function
exportado del módulo del GKI durante la carga, sin aparecer en la lista de símbolos del proveedor.
Resolución:
Si module.ko
no es un módulo del 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.
Como alternativa, usa la versión de 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 de GKI protegido, y es probable que module.ko
sea una versión personalizada no firmada de ese módulo. Cuando module.ko
intenta exportar some_kernel_function
, que solo se puede exportar con un módulo de GKI firmado, la carga falla y se muestra este mensaje.
Resolución:
Esto se puede corregir usando la versión del GKI del módulo que exporta some_kernel_function
, si el módulo sin firmar es una versión personalizada.