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 estás familiarizado con la GKI ni la terminología del kernel de GKI, consulta la descripción general del kernel.

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

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

¿Puedo cambiar las estructuras que usan los módulos de proveedores en un kernel estable?

Las estructuras que forman parte de una interfaz de KMI no se pueden cambiar en kernels con un KMI congelado. Antes de que se congele el KMI, se pueden cambiar estas estructuras.

¿Puedo cambiar el kernel, siempre y cuando no afecte la compatibilidad binaria o de origen?

Los cambios que no afectan al KMI se pueden realizar como se describe en los parches específicos de Android.

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

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

¿Cómo controlo las correcciones de errores ascendentes para los reemplazos de módulos de GKI existentes?

Si creas un módulo de proveedor basado en un controlador en el kernel común de Android (ACK), depende de ti asegurarte de que las correcciones de errores de upstream y ACK se propaguen a tu módulo. Por lo general, te recomendamos que uses el kernel y los módulos de GKI sin modificaciones para que Google proporcione estas actualizaciones de forma coherente.

¿Hay pruebas específicas de GKI?

Hay pruebas del Conjunto de pruebas de proveedores (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 la versión 3 del encabezado de inicio y que verifican la existencia de particiones obligatorias en un dispositivo que ejecuta un kernel 5.10.

¿Cómo creo el archivo de fragmento defconfig del proyecto para 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 de los proveedores. Algunos ejemplos que forman parte de la base de código de ACK son Cuttlefish y DB845c. No hay forma de evitar un examen 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 una solución para que modprobe trate - y _ como equivalentes?

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

¿Cómo habilito los debugfs para uso interno?

Para obtener detalles sobre cómo habilitar debugfs, consulta funciones de depuración descendente invasivas.

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

Las ABIs que no coinciden entre el kernel de GKI y la configuración del módulo representan una dependencia de configuración de módulo implícita, en la que habilitar un módulo hace que se compile una configuración binaria en la imagen de kernel resultante. Comunícate con el equipo del kernel de Android (kernel-team@android.com) para determinar una solución. 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.

Tengo dispositivos compatibles con GKI 1.0 en el campo que ejecutan el kernel 5.4 que se lanzó con Android 11 y 12. ¿Qué opciones de actualización del kernel están disponibles y cómo puedo probar estos dispositivos cuando actualice a Android 12 y 13?

Consulta la matriz de compatibilidad para obtener una lista de las versiones de kernel compatibles con las versiones de lanzamiento y actualización. Estos son dos ejemplos de actualizaciones:

Ejemplo 1: Un usuario con un dispositivo que se inicia con Android 11 con el kernel android11-5.4 (GKI 1.0) puede elegir cualquiera de estas opciones cuando actualice a Android 12:

  • Actualiza al kernel android12-5.10 de GKI 2.0 (muy recomendado).

  • Mantén el kernel android11-5.4.

  • Actualiza al kernel android12-5.4.

Ejemplo 2: Un usuario con un dispositivo que se inicia con Android 12 con el kernel android12-5.4 o android12-5.10 puede elegir cualquiera de estas opciones cuando actualice a Android 13:

  • Actualiza al kernel android13-5.10 o android13-5.15 GKI 2.0 (muy recomendable).

  • Mantén el kernel android12-5.4 GKI 1.0.

  • Mantén el kernel android12-5.10 GKI 2.0.

Específicamente para las pruebas de cumplimiento de Treble, te recomendamos que hagas una de las siguientes acciones:

  • Reemplaza el kernel del socio por el kernel certificado de GKI 1.0 (android11-5.4 o android12-5.4).

  • Se envía con el kernel certificado de GKI 2.0 (android12-5.10, android13-5.10 o android13-5.15), según tu selección.

Puedes descargar compilaciones de GKI 2.0 de las compilaciones de lanzamiento de la imagen genérica de kernel (GKI).