Configura las funciones del kernel como módulos de GKI

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.

Configura una nueva función como un módulo de GKI

  1. Para la nueva función, edita gki_defconfig y establece el elemento de configuración de la función del kernel requerida de n a m (=m). Establece este parámetro de configuración en arch/arm64/configs/gki_defconfig y arch/x86/configs/gki_defconfig.

  2. Agrega los archivos KO (.ko) generados para la función a la sección _COMMON_GKI_MODULES_LIST del siguiente archivo. Agrega los archivos en orden. Si no estás seguro de todos los archivos generados, la compilación falla y muestra todos los archivos KO necesarios que se deben agregar a la lista.

    • En android17-6.18 y versiones posteriores, agrega elementos a common/bazel/modules_private.bzl.
    • En android16-6.12 y versiones anteriores, agrega elementos a common/modules.bzl.
  3. Para Android 14, agrega el mismo conjunto de archivos KO del paso 2, ordenados 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 un módulo de GKI protegido.

  4. Para 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, ejecuta tools/bazel run //common:kernel_aarch64_abi_update_protected_exports para aarch64.

  5. Asegúrate de que los archivos KO agregados recientemente del paso 2 se copien a out/<androidX-Y.Z>/dist/system_dlkm.img y out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz del kernel. Los módulos del archivo system_dlkm_staging_archive.tar.gz se pueden usar como entrada para generar system_dlkm.img en la compilación de la plataforma.

  6. Envía tus 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 los parches de conversión de módulos de forma ascendente. 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

  1. Para una función integrada existente del kernel, edita gki_defconfig y establece el elemento de configuración de la función del kernel requerida de y a m (=m). Establece este parámetro de configuración en arch/arm64/configs/gki_defconfig y arch/x86/configs/gki_defconfig.

  2. Agrega los archivos KO (.ko) generados para la función a la sección _COMMON_GKI_MODULES_LIST del siguiente archivo. Agrega los archivos en orden. Si no estás seguro de todos los archivos generados, la compilación falla y muestra todos los archivos KO necesarios que se deben agregar a la lista.

    • En android17-6.18 y versiones posteriores, agrega elementos a common/bazel/modules_private.bzl.
    • En android16-6.12 y versiones anteriores, agrega elementos a `common/modules.bzl.
  3. Para Android 14, agrega el mismo conjunto de archivos KO del paso 2, ordenados 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 un módulo de GKI protegido.

  4. Para 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} con tools/bazel run //common:kernel_aarch64_abi_update_protected_exports para aarch64.

  5. Asegúrate de que los archivos KO del módulo convertidos recientemente del paso 2 se copien a del kernel out/<androidX-Y.Z>/dist/system_dlkm.img y out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz. Los módulos del archivo system_dlkm_staging_archive.tar.gz se pueden usar como entrada para generar system_dlkm.img en la compilación de la plataforma.

  6. Envía tus 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 los parches de conversión de módulos de forma ascendente. Sin embargo, debes seguir los otros lineamientos para enviar parches del kernel común de Android (ACK).

Convierte un módulo de GKI protegido en uno no protegido

  1. Para 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 siguiente archivo:

    • En android17-6.18 y versiones posteriores, agrega elementos a common/bazel/modules_private.bzl.
    • En android16-6.12 y versiones anteriores, agrega elementos a common/modules.bzl.
  2. Para 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.

  3. Para Android 14 y 15, actualiza la lista de exportaciones protegidas para excluir las del módulo no protegido convertido recientemente en el common/android/abi_gki_protected_exports_{ARCH} con tools/bazel run //common:kernel_aarch64_abi_update_protected_exports para aarch64.

  4. Envía tus 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 los parches de conversión de módulos de forma ascendente. 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 firma incumplen la protección de símbolos establecida para los módulos de GKI, se pueden encontrar dos tipos de errores durante la carga del módulo, lo que provoca una falla.

1. Módulo sin firma 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 firma y trata de resolver el símbolo exportado del módulo de GKI some_kernel_function durante la carga, sin aparecer en la lista de símbolos del proveedor.

Resolución:

Si module.ko no es un módulo de GKI protegido, la actualización de la lista de símbolos resuelve el error incluyendo 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 firma 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 firma de ese módulo. Cuando module.ko intenta exportar some_kernel_function, que solo puede exportar un módulo de GKI firmado, la carga falla con este mensaje.

Resolución:

Esto se puede corregir usando la versión de GKI del módulo que exporta some_kernel_function, si el módulo sin firma es una versión personalizada.