El kernel de Android se basa en un kernel de Linux con compatibilidad a largo plazo (LTS) de upstream. En Google, los kernels de LTS se combinan con parches específicos de Android para formar lo que se conoce como kernels comunes de Android (ACK).
Los ACK más recientes (versión 5.4 y posteriores) también se conocen como kernels de GKI. Los kernels de GKI admiten la separación del código del kernel genérico independiente del hardware y los módulos de GKI de los módulos del proveedor específicos del hardware.
El kernel de GKI interactúa con módulos de proveedores específicos del hardware que contienen un sistema en chip (SoC) y un código específico de la placa. La interacción entre el kernel de GKI y los módulos de proveedores está habilitada por la interfaz de módulo de kernel (KMI), que consta de listas de símbolos que identifican las funciones y los datos globales que requieren los módulos de proveedores. En la Figura 1, se muestra el kernel de GKI y la arquitectura del módulo del proveedor:
![Arquitectura de GKI](https://source.android.google.cn/static/docs/core/architecture/images/generic-kernel-image-architecture.png?authuser=1&hl=es-419)
Glosario de kernel
En esta sección, se incluyen los términos que se usan en toda la documentación del kernel.
Tipos de kernel
- Kernel común de Android (ACK)
- Un kernel que está aguas abajo de un kernel LTS y que incluye parches de interés para la comunidad de Android que no se fusionaron en el kernel principal de Linux ni en los kernels de asistencia a largo plazo (LTS). Los ACK más recientes (versión 5.4 y posteriores) también se conocen como kernels de GKI, ya que admiten la separación del código del kernel genérico independiente del hardware y los módulos de GKI independientes del hardware.
- Kernel del Proyecto de código abierto de Android (AOSP)
- Consulta Kernel común de Android.
- Kernel de funciones
- Un kernel para el que se garantiza que se implementarán las funciones de lanzamiento de la plataforma. Por ejemplo, en Android 12, los dos kernels de funciones eran android12-5.4 y android12-5.10. Las funciones de Android 12 no se pueden portar a kernels 4.19. El conjunto de funciones sería similar al de un dispositivo que se lanzó con 4.19 en Android 11 y se actualizó a Android 12.
- kernel de núcleo genérico
- Es la parte del kernel de GKI que es común a todos los dispositivos.
- Kernel de la imagen genérica del kernel (GKI)
- Cualquier kernel de ACK más reciente (5.4 y versiones posteriores) (actualmente, solo aarch64). Este kernel tiene dos partes: el kernel principal de GKI con código común para todos los dispositivos y los módulos de GKI que desarrolló Google y que se pueden cargar de forma dinámica en los dispositivos cuando corresponda.
- Kernel de la interfaz de módulo de kernel (KMI)
- Consulta Kernel de GKI.
- Launch Kernel
- Un kernel válido para iniciar un dispositivo para una versión determinada de la plataforma de Android. Por ejemplo, en Android 12, los kernels de inicio válidos eran 4.19, 5.4 y 5.10.
- Kernel de compatibilidad a largo plazo (LTS)
- Un kernel de Linux compatible durante 2 a 6 años Los kernels LTS se lanzan una vez al año y son la base de cada uno de los ACKs de Google.
Tipos de ramas
- Rama del kernel de KMI de ACK
- Es la rama para la que se compilan los kernels de GKI. Por ejemplo, android12-5.10 y android13-5.15.
- Android-mainline
- Es la rama de desarrollo principal para las funciones de Android. Cuando se declara un nuevo kernel de LTS en upstream, el nuevo kernel de GKI correspondiente se deriva de android-mainline.
- Línea principal de Linux
- La rama de desarrollo principal para los kernels de Linux upstream, incluidos los kernels LTS.
Otros términos
- Imagen de arranque certificada
- El kernel se entrega en formato binario (
boot.img
) y se escribe en la memoria flash del dispositivo. Esta imagen está certificada en el sentido de que contiene certificados incorporados para que Google pueda verificar que el dispositivo se envíe con un kernel certificado por Google. - Módulo de kernel que se puede cargar de forma dinámica (DLKM)
- Es un módulo que se puede cargar de forma dinámica durante el inicio del dispositivo según las necesidades del dispositivo. Los módulos de GKI y de proveedores son ambos tipos de DLKM. Los DLKM se lanzan en formato
.ko
y pueden ser controladores o proporcionar otras funciones del kernel. - Proyecto de GKI
- Un proyecto de Google que aborda la fragmentación del kernel mediante la separación de la funcionalidad común del kernel principal de la compatibilidad con SoC y placas específicas del proveedor en módulos cargables.
- Imagen genérica del kernel (GKI)
- Es una imagen de arranque certificada por Google que contiene un kernel de GKI compilado a partir de un árbol de origen ACK y es adecuada para escribirse en la partición de arranque de un dispositivo Android.
- KMI
- Es una interfaz entre el kernel de GKI y los módulos del proveedor que permite que los módulos del proveedor se actualicen independientemente del kernel de GKI. Esta interfaz consta de funciones del kernel y datos globales que se identificaron como dependencias del proveedor o OEM mediante listas de símbolos por socio.
- Módulos de GKI
- Son módulos de kernel creados por Google que se pueden cargar de forma dinámica en los dispositivos cuando corresponda.
Estos módulos se compilan como artefactos del kernel de GKI y se entregan junto con GKI como el archivo
system_dlkm_staging_archive.tar.gz
. Google firma los módulos de GKI con el par de claves del tiempo de compilación del kernel y solo son compatibles con el kernel de GKI con el que se compilan. - Módulo de proveedores
- Un módulo específico de hardware desarrollado por un socio que contiene funciones específicas del SoC y del dispositivo. Un módulo de proveedor es un tipo de módulo de kernel que se puede cargar de forma dinámica.
¿Qué sigue?
- Si es la primera vez que desarrollas kernels de Android, te recomendamos que primero leas lo siguiente:
- Kernels estables a largo plazo: Información general sobre los kernels LTS upstream que se alimentan de los ACK.
- Kernels comunes de Android: Información general sobre los ACK.
- Si es la primera vez que desarrollas un kernel de GKI, comienza por leer Desarrollo de GKI.