El kernel de Android se basa en un kernel de Linux con asistencia a largo plazo (LTS) de nivel superior. En Google, los kernels de LTS se combinan con parches específicos de Android para formar los kernels comunes de Android (ACK).
Los ACK se compilan a partir del repositorio kernel/common. Este repositorio es un superconjunto del kernel de Linux upstream, con parches adicionales específicos de Android.
Los ACK 5.10 y versiones posteriores también se conocen como *kernels de imagen genérica del kernel (GKI). Los kernels de GKI admiten la separación del código del kernel genérico principal independiente del hardware y los módulos de GKI de los módulos del proveedor específicos del hardware.
La interacción entre el kernel del GKI y los módulos del proveedor se habilita a través de la interfaz de módulos del kernel (KMI), que consta de listas de símbolos que identifican las funciones y los datos globales que requieren los módulos del proveedor. En la figura 1, se muestra la arquitectura del kernel del GKI y del módulo del proveedor:
Figura 1: Arquitectura del kernel de GKI y del módulo del proveedor.
Glosario del kernel
A continuación, se incluyen los términos que se usan en toda la documentación del kernel.
Tipos de kernel
- Android Common Kernel (ACK)
- Es un kernel que se encuentra en sentido descendente de un kernel de LTS y que incluye parches importantes para la comunidad de Android. Estos parches no se combinaron en los kernels de Linux mainline o GKI a largo plazo.
Los kernels con versiones 5.10 y posteriores también se conocen como kernels de imagen genérica del kernel (GKI).
- Kernel del Proyecto de código abierto de Android (AOSP)
- Consulta Kernel común de Android.
Las funciones de Android 12 no se pueden portar a versiones anteriores de 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 la imagen genérica del kernel (GKI)
Cualquier kernel de ACK 5.10 y versiones posteriores(solo para aarch64). El kernel de GKI tiene estas dos partes:
Kernel genérico: Es la parte del kernel de la GKI que es común a todos los dispositivos.
Módulos de GKI: Son módulos del kernel compilados 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 de tiempo de compilación del kernel y solo son compatibles con el kernel de GKI con el que se compilan.
- Kernel de la interfaz del módulo del kernel (KMI)
Consulta Kernel de GKI.
- Kernel con asistencia a largo plazo (LTS)
Un kernel de Linux compatible durante 2 a 6 años Los kernels de LTS se lanzan una vez al año y son la base de cada uno de los kernels comunes de Android de Google.
Tipos de ramas
- ACK KMI kernel branch
- Es la rama para la que se compilan los kernels de GKI. Los nombres de las ramas corresponden a las versiones del kernel, como
android15-6.6
. - Android-mainline
- Es la rama de desarrollo principal para las funciones de Android. Cuando se declara un nuevo kernel de LTS upstream, el nuevo kernel de GKI correspondiente se bifurca desde android-mainline.
Linux mainline: Es la rama de desarrollo principal para los kernels de Linux upstream, incluidos los kernels LTS.
Otros términos
- Imagen de arranque certificada
- Es el kernel que se entrega en formato binario (
boot.img
) y se escribe en la memoria flash del dispositivo. Esta imagen se considera certificada porque contiene certificados incorporados, por lo que Google puede verificar que el dispositivo se envíe con un kernel certificado por Google. - Módulo de kernel cargable de forma dinámica (DLKM)
- Un módulo que se puede cargar de forma dinámica durante el inicio del dispositivo según las necesidades del dispositivo. El GKI y los módulos del proveedor son tipos de DLKM. Los DLKM se lanzan en formato
.ko
y pueden ser controladores o proporcionar otra funcionalidad del kernel. - Proyecto de GKI
- Un proyecto de Google que aborda la fragmentación del kernel separando la funcionalidad común del kernel principal de la asistencia específica del SoC y la placa 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 de ACK y que se puede escribir en la partición de arranque de un dispositivo con Android.
- Interfaz de módulo del kernel (KMI)
- Una interfaz entre el kernel de GKI y los módulos del proveedor que permite que los módulos del proveedor se actualicen de forma independiente del kernel de GKI Esta interfaz consta de funciones del kernel y datos globales que se identificaron como dependencias del OEM o del proveedor con listas de símbolos por socio.
- Módulo de proveedores
- Módulo específico de hardware desarrollado por un socio que contiene funciones específicas del SoC y del dispositivo. Un módulo del proveedor es un tipo de módulo del kernel que se puede cargar de forma dinámica.
Próximos pasos
Si es la primera vez que desarrollas kernels de Android, comienza por leer lo siguiente:
- Kernels estables a largo plazo: Antecedentes sobre los kernels LTS ascendentes que se incorporan a los ACK.
- Android Common Kernels: Información general sobre los ACK
Si es la primera vez que desarrollas kernels de GKI, comienza por leer Desarrollo de GKI.