Configurar funciones del núcleo como módulos GKI

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

  1. Para la nueva función, edite gki_defconfig y configure el elemento de configuración de la función del kernel requerido de n a m ( =m ). Establezca esta configuración en arch/arm64/configs/gki_defconfig y arch/x86/configs/gki_defconfig .

  2. Agregue los archivos KO ( .ko ) generados para la característica a la sección COMMON_GKI_MODULES_LIST de common/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.

  3. 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 en common/android/abi_gki_protected_exports_{ARCH} usando tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64 . Los módulos designados como módulos GKI protegidos aún deben ser aprobados por Google para ser módulos protegidos oficiales.

  4. 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 y out/ androidX-YZ /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.

  5. 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

  1. 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 de y a m ( =m ). Establezca esta configuración en arch/arm64/configs/gki_defconfig y arch/x86/configs/gki_defconfig .

  2. Agregue los archivos KO ( .ko ) generados para la característica a la sección COMMON_GKI_MODULES_LIST de common/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.

  3. 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 en common/android/abi_gki_protected_exports_{ARCH} usando tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64 . Los módulos designados como módulos GKI protegidos aún deben ser aprobados por Google para ser módulos protegidos oficiales.

  4. 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 y out/ androidX-YZ /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.

  5. 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

  1. 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 .

  2. 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} usando tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64 .

  3. 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.