En esta página, se explica cómo configurar una nueva función del kernel como un módulo de GKI o configurar una función del kernel integrada existente como un módulo de GKI.
Cómo configurar una función nueva como un 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 requerido den
am
(=m
). Establece este parámetro de configuración enarch/arm64/configs/gki_defconfig
yarch/x86/configs/gki_defconfig
.Agrega los archivos KO (
.ko
) generados para la función a la secciónCOMMON_GKI_MODULES_LIST
decommon/modules.bzl
. Agrega los archivos en un orden ordenado. Si no estás seguro de todos los archivos generados, la compilación fallará y mostrará todos los archivos KO necesarios que se agregarán a la lista.Agrega el mismo conjunto de archivos KO del paso 2, en orden 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 módulo de GKI protegido. Actualiza la lista de exportaciones que están protegidas para incluir las del módulo agregado recientemente en elcommon/android/abi_gki_protected_exports_{ARCH}
contools/bazel run //common:kernel_aarch64_abi_update_protected_exports
paraaarch64
. Google aún debe aprobar los módulos designados como módulos de GKI protegidos para que sean módulos protegidos oficiales.Asegúrate de que los archivos KO agregados recientemente 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 tus cambios para su revisión. Los módulos de GKI son una función de kernel solo para 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 de kernel común de Android (ACK).
Configura una función integrada del kernel como un módulo de GKI
Para una función de kernel integrada existente, edita
gki_defconfig
y establece el elemento de configuración de la función de kernel requerida dey
am
(=m
). Establece esta configuración enarch/arm64/configs/gki_defconfig
yarch/x86/configs/gki_defconfig
.Agrega los archivos KO (
.ko
) generados para la función a la secciónCOMMON_GKI_MODULES_LIST
decommon/modules.bzl
. Agrega los archivos en un orden ordenado. Si no estás seguro de todos los archivos generados, la compilación fallará y mostrará todos los archivos KO necesarios que se agregarán a la lista.Agrega el mismo conjunto de archivos KO del paso 2, ordenados de forma ascendente para la búsqueda binaria durante el tiempo de ejecución, a
common/android/gki_{ARCH}_protected_modules
para designar el módulo como un módulo de GKI protegido. Actualiza la lista de exportaciones que están protegidas para incluir las del módulo recién agregado acommon/android/abi_gki_protected_exports_{ARCH}
contools/bazel run //common:kernel_aarch64_abi_update_protected_exports
paraaarch64
. Google aún debe aprobar los módulos designados como módulos de GKI protegidos para que sean módulos protegidos oficiales.Asegúrate de que los archivos KO del módulo convertidos recientemente 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 a revisión. Los módulos de GKI son una función de kernel solo para Android, por lo que no es necesario enviar parches de conversión de módulos upstream. Sin embargo, debes seguir los demás lineamientos para enviar parches de kernel común (ACK) de Android.
Cómo convertir un módulo de GKI protegido en uno no protegido
Quita el módulo que se convertirá de protegido a no protegido de la lista de módulos protegidos en
common/android/gki_protected_modules
.Actualiza la lista de exportaciones que están protegidas para excluir otras del módulo desprotegido 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 a revisión. Los módulos de GKI son una función de kernel exclusiva de Android, por lo que no es necesario que los parches de conversión de módulos se envíen ascendentes. Sin embargo, debes seguir los otros lineamientos para enviar parches del kernel común de Android (ACK).
Guía rápida de resolución de 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, es posible que se encuentren dos tipos de errores durante la carga de módulos, lo que genera fallas.
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 de proveedor sin firmar y, durante la carga, intenta resolver el símbolo exportado del módulo GKI some_kernel_function
sin aparecer en la lista de símbolos del proveedor.
Solución:
Si module.ko
no es un módulo GKI protegido, actualizar la lista de símbolos resolverá el error, ya que 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 sin firmar de ese módulo. Cuando module.ko
intenta exportar some_kernel_function
, que solo puede exportar un módulo GKI firmado, la carga falla con este mensaje.
Solución:
Esto se puede corregir usando la versión de GKI del módulo que exporta some_kernel_function
, si el módulo sin firmar es una versión personalizada.