Descripción general del kernel

El kernel de Android se basa en un código Kernel compatible a largo plazo (LTS) de Linux. En Google, LTS se combinan con parches específicos de Android para crear lo que se conoce como Kernel comunes (ACK) de Android

Los ACK más nuevos (versión 5.4 y posteriores) también se conocen como kernels de GKI. Los kernels de GKI admiten del kernel genérico independiente del hardware y módulos de GKI del específicas de hardware módulos para proveedores.

El kernel de GKI interactúa con módulos de proveedores específicos de hardware que contienen el sistema en un 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 es habilitada por la interfaz de módulo de kernel (KMI) compuesta por listas de símbolos que identifican y los datos globales necesarios para los módulos de proveedores. En la Figura 1, se muestran el kernel y el proveedor de GKI. arquitectura de los módulos:

Arquitectura de GKI
Figura 1: Arquitectura de GKI

Glosario del kernel

Esta sección contiene 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á en un nivel inferior a un kernel de LTS y que incluye parches de interés para Android que no se hayan combinado en kernels de Linux con compatibilidad a largo plazo o LTS. Los ACK más nuevos (versión 5.4 y superiores) también se conocen como kernels de GKI, ya que admiten del código de kernel genérico 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
Es un kernel para el que se garantiza la implementación de las funciones de la versión de la plataforma. Para Por ejemplo, en Android 12, los dos kernels de funciones eran android12-5.4 y android12-5.10. No se puede aplicar portabilidad a versiones anteriores de las funciones de Android 12 a kernels de 4.19. el conjunto de atributos sería similar a un dispositivo que se lanzó con 4.19 en Android 11 y se actualizó a Android 12.
kernel genérico principal
Es la parte del kernel de GKI que es común en todos los dispositivos.
Kernel de imagen genérica de kernel (GKI)
Cualquier kernel ACK más reciente (5.4 y posterior) (actualmente solo aarch64) Esta tiene dos partes: el kernel principal de GKI con código común en todos los dispositivos y módulos de GKI desarrolladas por Google que se pueden cargar de forma dinámica en dispositivos cuando corresponda.
Kernel de la interfaz de módulo de kernel (KMI)
Consulta Kernel de GKI.
Iniciar kernel
Es un kernel válido para iniciar un dispositivo para una versión determinada de la plataforma de Android. Para Por ejemplo, en Android 12, los kernels de lanzamiento válidos fueron 4.19, 5.4 y 5.10.
Kernel compatible a largo plazo (LTS)
Un kernel de Linux que se admite durante 2 a 6 años. LTS kernels se lanzan una vez al año y son la base de cada uno de Las confirmaciones de Google.

Tipos de ramas

Rama del kernel de KMI de ACK
Rama para la que se compilan los kernels de GKI. Por ejemplo, android12-5.10 y android13-5.15.
Línea principal de Android
La rama de desarrollo principal para las funciones de Android. Cuando un equipo de LTS nuevo kernel se declara en sentido ascendente, el nuevo kernel de GKI correspondiente es ramificada desde la línea principal de Android.
Línea principal de Linux
Es la rama de desarrollo principal para los kernels ascendentes de Linux, incluidos los kernels de LTS.

Otras condiciones

Imagen de arranque certificada
Es el kernel entregado en formato binario (boot.img) y escrito 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 de carga dinámica (DLKM)
Un módulo que puede cargarse de forma dinámica durante el inicio del dispositivo según las necesidades del dispositivo. GKI y los módulos de proveedores son tipos de DLKM. Los DLKM se publican en .ko y pueden ser controladores o pueden ofrecer otras funcionalidades de kernel.
Proyecto de GKI
Un proyecto de Google que aborda la fragmentación del kernel separando el kernel común. del SoC específico del proveedor y la compatibilidad con la placa en módulos cargables.
Imagen genérica del kernel (GKI)
Una imagen de arranque certificada por Google que contiene un kernel de GKI compilado a partir de un árbol de fuentes de ACK y es adecuado para escribirlo en la memoria flash de la partición de inicio de un dispositivo Android.
KMI
Una interfaz entre el kernel de GKI y los módulos del proveedor, lo que permite al proveedor módulos que se actualizarán independientemente del kernel de GKI. Esta interfaz consiste en kernel funciones y datos globales que se identificaron como dependencias del OEM y el proveedor mediante listas de símbolos por socio.
Módulos de GKI
Módulos de kernel creados por Google que se pueden cargar de forma dinámica en 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. Módulos de GKI Google las firma usando el par de claves de tiempo de compilación del kernel y solo son compatibles con el GKI. kernel con el que se compilaron.
Módulo de proveedores
Un módulo específico de hardware desarrollado por un socio que contiene SoC y componentes funcionalidad. Un módulo de proveedor es un tipo de módulo de kernel de carga dinámica.

¿Qué sigue?

  • Si es la primera vez que desarrollas el kernel de Android, consulta el lo siguiente:
  • Si recién comienzas a desarrollar el kernel de GKI, comienza por leer Desarrollo de GKI.
  • Si usas una versión de kernel 4.19 o anterior y buscas documentación relacionada, consulta el artículo Anterior kernels (<=4.19).