Proyecto de imagen genérica de kernel (GKI)

El kernel de producto, también conocido como kernel de dispositivo o kernel de OEM, es el kernel que envías a tu dispositivo. Antes de GKI, el kernel del producto era derivadas de una serie de cambios de kernel ascendentes. En la Figura 1, se muestra cómo se ejecuta kernel generan un kernel de producto (kernel de OEM/dispositivo):

Construcción del kernel del producto anterior a GKI

Figura 1: Construcción del kernel del producto anterior a GKI

  1. Se modificó el kernel de Linux con asistencia a largo plazo (LTS) de kernel.org. con parches específicos de Android, lo que genera un kernel común de Android (ACK).
  2. Los proveedores que agregaron compatibilidad con su sistema en chip modificaron el ACK (SoC). Los proveedores también pueden agregar optimizaciones de rendimiento o potencia. El kernel resultante se denomina kernel del proveedor.
  3. Por último, los OEM modificaron el kernel del proveedor con los controladores de dispositivos y las personalizaciones que consideren necesarias. El kernel resultante se denomina kernel del producto.

Todas estas modificaciones pueden hacer que hasta el 50% código de kernel fuera del código del árbol y no de kernels o ACK de Linux ascendentes. Antes de GKI, casi todos los dispositivos tenían un kernel personalizado que daba como resultado kernel y fragmentación.

Costos de la fragmentación

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

Las actualizaciones de seguridad requieren mucho trabajo

Parches de seguridad citados en el Boletín de seguridad de Android (ASB) se debe brindar portabilidad a versiones anteriores en cada kernel del dispositivo. Sin embargo, debido a kernel fragmentación, es muy costoso propagar correcciones de seguridad a Android en el campo

Es difícil fusionar las actualizaciones admitidas a largo plazo.

Las versiones Con asistencia a largo plazo (LTS) incluyen correcciones de seguridad y otras correcciones de errores críticos. Mantenerse al tanto de los lanzamientos de LTS es la mejor y la manera más eficaz de ofrecer soluciones de seguridad. En los dispositivos Pixel, era descubrió que el 90% de los problemas de seguridad del kernel informados en el ASB tenían ya se corrigió para los dispositivos que se mantienen actualizados.

Sin embargo, con todas las modificaciones personalizadas en los kernels del dispositivo, y dificultaba combinar las correcciones de LTS en kernels de dispositivos.

Inhibe las actualizaciones de versiones de la plataforma de Android

La fragmentación dificulta el uso de kernel para nuevas funciones de Android que se agreguen a los dispositivos en el campo. El código del framework de Android debe suponer que se admitan hasta cinco versiones de kernel y que ningún kernel cambie se crearon para el nuevo lanzamiento de la plataforma (Android 10 admite kernels 3.18, 4.4, 4.9, 4.14 y 4.19, que en algunos casos no tienen se mejoraron con funciones nuevas desde Android 8 en 2017).

Es difícil contribuir con cambios de kernel a Linux ascendente de Linux.

Después de hacer todos los cambios en el kernel, la mayoría de los dispositivos insignia se envían con una versión de kernel que tenga al menos 18 meses de antigüedad. Por ejemplo, el kernel 4.14 fue lanzado por kernel.org en noviembre de 2017 y el primeros teléfonos Android con kernels 4.14 que se enviaron en la primavera de 2019.

Esta larga demora entre la versión del kernel ascendente y los productos dificulta que para que la comunidad de Android ingrese las funciones y los controladores necesarios kernels.

Corrige la fragmentación: imagen genérica del kernel

El proyecto de imagen genérica del kernel (GKI) aborda la fragmentación del kernel por Unificar el kernel principal y quitar la asistencia del SoC y la junta del kernel principal en módulos de proveedores cargables. GKI también presenta un módulo de kernel estable (KMI) para módulos de proveedores, por lo que se pueden actualizar los módulos y el kernel de forma independiente. Algunas características del kernel de GKI son las siguientes:

  • El kernel de GKI se compila a partir de fuentes de ACK.
  • El kernel de GKI es un objeto binario de un solo kernel y los módulos cargables asociados por arquitectura, por versión LTS (actualmente solo arm64 para android11-5.4 y android12-5.4).
  • El kernel de GKI se prueba con todas las versiones de la plataforma de Android que se compatibles con el ACK asociado. No se darán de baja las funciones durante la vida útil de un GKI. versión de kernel.
  • El kernel de GKI expone un KMI estable a los controladores dentro de una LTS determinada.
  • El kernel de GKI no contiene código específico de SoC ni de placa.

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

GKI es un cambio complejo que se lanzó en varias etapas, comenzando por los kernels v5.4 en la versión de la plataforma Android 11

Existen dos etapas de GKI:

  • GKI 1.0 se introdujo en Android 11 para dispositivos con kernels de 5.4. GKI 1.0 se aplica a todos los dispositivos que se envíen con kernels de 5.4, incluso aquellos que se inicien con Android 12
  • GKI 2.0 se introdujo en Android 12 para dispositivos con kernels 5.10 y es el nuevo estándar para todos los dispositivos que incluyen kernel 5.10 o kernels posteriores.

GKI 1.0

En GKI 1.0, los dispositivos que se lanzan con la versión de kernel 5.4 deben pasar las pruebas de GKI. (Android 11 y versiones posteriores de la plataforma). Los objetivos de GKI 1.0 incluyen lo siguiente:

  • Evita las regresiones en el Conjunto de pruebas de proveedores (VTS). Conjunto de pruebas de compatibilidad (CTS) cuando reemplazas el kernel de producto por el kernel de GKI.
  • Reduce la carga de mantener su kernel actualizado con AOSP kernels comunes.
  • Se incluyen los cambios principales de Android en los kernels de la actualización y el lanzamiento de dispositivos. con las nuevas versiones de Android.
  • No rompas el espacio del usuario de Android.
  • Separa los componentes específicos de hardware del kernel principal como módulos cargables.

Para ver la documentación de GKI 1.0, consulta la Sección de GKI 1.0.

GKI 2.0

En GKI 2.0, los dispositivos que se lanzan con la versión de kernel 5.10 o superior deben incluir el kernel de GKI (a partir de Android 12). Inicio firmado están disponibles y se actualizan periódicamente con LTS y correcciones de errores críticos. Debido a que se mantiene la estabilidad binaria para KMI, puedes instalar estos imágenes sin hacer cambios en las imágenes del proveedor. Los objetivos de GKI 2.0 incluyen el lo siguiente:

  • No ingreses regresiones de rendimiento ni de potencia significativas al reemplazar kernel del producto con el kernel de GKI.
  • Permite que los socios entreguen correcciones de seguridad y correcciones de errores del kernel sin un proveedor. y la participación.
  • Reduce el costo de actualizar la versión principal de kernel para los dispositivos (por ejemplo, de la versión 5.10 al kernel de LTS de 2021).
  • Mantener un solo binario de kernel de GKI por arquitectura mediante la actualización del kernel con un proceso claro de actualización.

GKI 2.0 representa el estado más actual de los kernels de Android. Kernel documentación fuera del GKI 1.0 y Kernels anteriores (<= 4.19) y las subsecciones reflejan la arquitectura de GKI 2.0.