Proyecto de imagen genérica de kernel (GKI)

En esta página, se describe el proyecto de imagen del kernel genérico (GKI) y cómo aumenta la estabilidad de Android y mejora la seguridad.

Historial

Todos los dispositivos Android necesitan un kernel de producción. Antes de la GKI, los kernels eran personalizados y se basaban en el kernel común de Android (ACK), con cambios específicos del dispositivo realizados por los proveedores de sistemas en chip (SoC) y los OEM.

Esta personalización podría hacer que hasta el 50% del código del kernel sea código externo y no provenga de los kernels de Linux upstream ni de los ACK. Por lo tanto, la naturaleza personalizada de los kernels anteriores al GKI generó una fragmentación significativa del kernel.

Costos de la fragmentación

La fragmentación del kernel tiene varios efectos negativos en la comunidad de Android.

Las actualizaciones de seguridad requieren mucho trabajo

Los parches de seguridad citados en el Boletín de seguridad de Android (ASB) deben transferirse a cada uno de los kernels del dispositivo. Sin embargo, debido a la fragmentación del kernel, resulta prohibitivo propagar las correcciones de seguridad a los dispositivos Android en el campo.

Es difícil combinar las actualizaciones compatibles a largo plazo

Las versiones con asistencia a largo plazo (LTS) incluyen correcciones de seguridad y otras correcciones de errores críticos. Mantenerse al día con las versiones de LTS demostró ser la forma más eficaz de proporcionar correcciones de seguridad. En los dispositivos Pixel, se descubrió que el 90% de los problemas de seguridad del kernel informados en el ASB ya se habían corregido en los dispositivos que se mantienen actualizados.

Sin embargo, con todas las modificaciones personalizadas en los kernels del dispositivo, es difícil simplemente combinar las correcciones de LTS en los kernels del dispositivo.

Inhibe las actualizaciones de la versión de la plataforma de Android

La fragmentación dificulta la incorporación de nuevas funciones de Android que requieren cambios en el kernel a los dispositivos en el campo. El código del framework de Android debía tener en cuenta las diferentes variaciones del kernel y no podía depender de que se implementaran nuevas funciones de Android en el kernel. Esto ralentizó la innovación y provocó un aumento en el tamaño y la complejidad del código.

Es difícil contribuir con los cambios del kernel al kernel de Linux upstream

La forma fragmentada de incorporar parches en los kernels de producción provocó una demora de hasta 18 meses desde el momento en que una versión de LTS estuvo disponible en el upstream hasta que se incorporó en un dispositivo. Este largo retraso entre el lanzamiento del kernel upstream y los productos dificulta que la comunidad de Android proporcione las funciones y los controladores necesarios a los kernels upstream. Cuando un usuario enviaba sugerencias para mejorar el código base, este ya había cambiado, lo que dificultaba mostrar la relevancia del parche.

Cómo corregir la fragmentación: Imagen genérica del kernel

El proyecto de imagen genérica del kernel (GKI) aborda la fragmentación del kernel unificando el kernel principal y transfiriendo la asistencia del SoC y la placa desde el kernel principal hacia los módulos cargables del proveedor. GKI también presenta una interfaz estable de módulo del kernel (KMI) para los módulos del proveedor, de modo que los módulos y el kernel se puedan actualizar de forma independiente. Estas son algunas características del kernel de GKI:

  • El kernel de GKI se compila a partir de las fuentes de ACK.
  • El kernel de GKI es un kernel binario único más los módulos cargables asociados por arquitectura y por versión de LTS.
  • El kernel de GKI se prueba con todas las versiones de la plataforma de Android compatibles con el ACK asociado. No se dejará de usar ninguna función durante la vida útil de una versión del kernel de GKI.
  • El kernel de GKI expone una KMI estable a los controladores dentro de un LTS determinado.
  • El kernel del GKI no contiene código específico del SoC ni de la placa.

Para ver una imagen de la arquitectura de GKI, consulta la Descripción general del kernel.

Imagen común

A partir de Android 12, los dispositivos que se lancen con la versión del kernel 5.10 o posterior deben incluir el kernel de la GKI. Las compilaciones de lanzamiento de imágenes genéricas de kernel (GKI) se actualizan con regularidad con correcciones de errores críticos y de LTS. Dado que se mantiene la estabilidad binaria para la KMI, puedes instalar estas imágenes de arranque sin realizar cambios en las imágenes del proveedor. El proyecto de GKI tiene los siguientes objetivos:

  • No introducir regresiones significativas de rendimiento o energía cuando se reemplaza el kernel del producto por el kernel del GKI
  • Permite que los socios proporcionen correcciones de seguridad y de errores del kernel sin la participación del proveedor.
  • Reducir el costo de actualizar la versión principal del kernel para los dispositivos
  • Mantener un solo kernel binario de GKI por arquitectura actualizando las versiones del kernel con un proceso claro para la actualización