Preguntas frecuentes sobre el kernel de Android

En este documento, se incluyen preguntas frecuentes sobre el kernel de Android, también conocido como kernel de la imagen genérica del kernel (GKI). Si no conoces la terminología del kernel de GKI y GKI, consulta la Descripción general del kernel.

¿Se pueden cambiar las listas de símbolos de la interfaz del módulo del kernel (KMI) en un kernel estable?

Los cambios que no afectan la KMI existente se pueden agregar a los kernels que están congelados. Estos cambios incluyen nuevas funciones exportadas y entradas de la lista de símbolos. Para obtener más información, consulta Administra listas de símbolos.

¿Puedo cambiar las estructuras que utilizan los módulos del proveedor en un kernel estable?

Las estructuras que forman parte de una interfaz de KMI no se pueden cambiar en kernels con una KMI inmovilizada. Antes de la congelación del KMI, estas estructuras se pueden cambiar.

¿Puedo cambiar el kernel siempre y cuando no interrumpa la compatibilidad binaria o de código fuente?

Los cambios que no afectan la KMI se pueden realizar como se describe en Parches específicos de Android.

¿Cómo controla GKI la configuración del kernel?

Para obtener información sobre la configuración del kernel, consulta Cambios en gki_defconfig.

¿Cómo manejo las correcciones de errores upstream para las escrituras en módulos de GKI existentes?

Si creas un módulo del proveedor basado en un controlador en el kernel común de Android (ACK), depende de ti garantizar que las correcciones de errores de la versión upstream y del ACK se propaguen a tu módulo. En general, te conviene usar el kernel de GKI y los módulos de GKI sin modificaciones para que Google proporcione estas actualizaciones de manera coherente.

¿Hay pruebas específicas del GKI?

Existen pruebas del Vendor Test Suite (VTS) que verifican que se haya instalado una compilación de GKI certificada y que también aplican los requisitos de GKI por versión. Por ejemplo, hay pruebas de VTS de Android 12 para el encabezado de inicio v3 y para verificar la existencia de particiones requeridas en un dispositivo que ejecuta un kernel 5.10.

¿Cómo creo el archivo de fragmento defconfig del proyecto para las compilaciones de dispositivos?

Muchos dispositivos compatibles con GKI usan un fragmento de configuración para describir las opciones de configuración necesarias, además de gki_defconfig, para compilar los módulos del proveedor. Entre los ejemplos que forman parte de la base de código del ACK, se incluyen Cuttlefish y DB845c. No hay forma de evitar el análisis manual de las opciones de configuración para optimizar el fragmento, pero scripts/diffconfig de las fuentes del kernel es útil para comparar los resultados de gki_defconfig y gki_defconfig+device.fragment.

¿Existe alguna solución alternativa para que modprobe no trate los guiones y los guiones bajos como equivalentes?

La página de manual de modprobe contiene esta descripción: "modprobe agrega o quita de forma inteligente un módulo del kernel de Linux: ten en cuenta que, para mayor comodidad, no hay diferencia entre _ y - en los nombres de los módulos (se realiza la conversión automática de guiones bajos)". El equipo del GKI se adhiere a la convención estándar de upstream, por lo que las herramientas del proveedor o las convenciones de nomenclatura de módulos deben tener en cuenta esta adhesión.

¿Cómo habilito debugfs para uso interno?

Para obtener detalles sobre cómo habilitar debugfs, consulta Funciones de depuración intrusivas de nivel inferior.

¿Cómo puedo resolver las ABIs que no coinciden entre el kernel de GKI y una configuración de módulo específica habilitada?

Las ABI que no coinciden entre el kernel de GKI y la configuración del módulo representan una dependencia implícita de la configuración del módulo, en la que habilitar un módulo hace que se compile una configuración binaria en la imagen del kernel resultante. Comunícate con el equipo del kernel de Android (kernel-team@android.com) para determinar un camino a seguir. Después de determinar la lista de símbolos, crea un error en el Seguimiento de problemas y sube un cambio a la lista de símbolos.