Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Núcleos comunes de Android

Los núcleos AOSP comunes (también conocidos como los granos comunes Android o ACK) están aguas abajo de kernel.org núcleos e incluyen parches de interés para la comunidad Android que no se han fusionado en la línea principal o el apoyo a largo plazo (LTS) núcleos. Estos parches pueden incluir:

  • Backports y selecciones de la funcionalidad upstream necesarias para las funciones de Android
  • Funciones listas para dispositivos Android pero aún en desarrollo en sentido ascendente (por ejemplo, optimizaciones de ubicación de tareas de Energy Aware Scheduler).
  • Funciones de proveedor / OEM que son útiles para otros socios del ecosistema (por ejemplo, sdcardfs).

android-mainline es la rama de desarrollo principal para las características de Android. Principal de Linux se combina en android-mainline siempre que los mensajes Linus Torvalds una versión candidata o liberación. Antes de 2019, los kernels comunes de Android se construían clonando el kernel LTS recientemente declarado y agregando los parches específicos de Android. Este proceso cambió en 2019 para ramificar el nuevo núcleo común de Android android-mainline . Este nuevo modelo evita el esfuerzo significativo de reenviar el puerto y probar los parches de Android al lograr el mismo resultado de forma incremental. android-mainline prueba continua sufre significativa, este modelo garantiza un núcleo de alta calidad desde el día en que se haya publicado.

Cuando un nuevo LTS se declara aguas arriba, el núcleo común correspondiente está ramificado desde android-mainline . Esto permite a los socios comienzan un proyecto antes de la declaración de la versión LTS, mediante la fusión de android-mainline . Una vez creada la nueva rama común del kernel, los socios pueden cambiar sin problemas la fuente de combinación a la nueva rama.

Otras ramas del kernel comunes reciben fusiones periódicos de su asociado kernel LTS . Normalmente, esto se hace inmediatamente después de que se publica la versión LTS. Por ejemplo, cuando Linux 4.19.64 fue publicada, que se fusionó con los granos 4.19 comunes (por ejemplo, android-4.19-q ). Se recomienda encarecidamente a los socios que se fusionen periódicamente de los núcleos comunes a los núcleos de sus productos para mantenerse actualizados con las correcciones de errores específicas de Android y LTS.

Condiciones

A continuación, se muestran algunos términos nuevos que se utilizan en este documento para describir las políticas comunes del kernel de Android.

Característica del kernel

Núcleos que se han mejorado con las características de la última versión de la plataforma Android se llaman núcleos de características. Para Android 11, los kernels de funciones se basan en las versiones 4.14.y, 4.19.y y 5.4.y del kernel. En versiones anteriores de la plataforma, los núcleos de funciones eran los mismos que los núcleos de lanzamiento. Sin embargo, en Android 12 habrá dos núcleos de funciones y tres núcleos de lanzamiento.

Imagen de kernel genérica

A partir de Android 11, los kernels comunes de Android se utilizan para crear imágenes de kernel genéricas (GKI), que son imágenes de kernel Aarch64 que se pueden usar para ejecutar cualquier dispositivo con SoC y compatibilidad con controladores implementados en módulos de proveedores. Para más detalles, consulte la descripción general GKI .

Interfaz del módulo de kernel

GKI introduce el concepto de un establo Kernel Módulo de interfaz (KMI) que permite que el núcleo central que se actualiza de forma asincrónica de los módulos de los proveedores. Cuando la KMI está congelada, no se pueden realizar cambios que rompan la compatibilidad binaria con los módulos de proveedores existentes. Ver el panorama general GKI para obtener más información sobre el IGC.

Lanzamiento del kernel

Los núcleos de lanzamiento designados pueden ser utilizados para el lanzamiento de los dispositivos con una versión de la plataforma Android en particular. Para Android 11, los dispositivos se pueden iniciar con kernels basados ​​en las versiones de kernel 4.14.y, 4.19.y y 5.4.y.

Tipos comunes de ramas del kernel

Rama del kernel de KMI

KMI granos tienen un establo del módulo de interfaz del kernel. El IGC se identifica de manera única por la versión del kernel y la versión de la plataforma Android, por lo que las ramas se denominan <androidRelease>-<kernel version> . Por ejemplo, el kernel 5.4 KMI para Android 11 es el nombre android11-5.4. Para Android 12 hay dos núcleos adicionales, KMI android12-5.4 y android12-5.10 .

Ramas de núcleo de postre heredadas

Los núcleos de postre heredados se crearon para garantizar que el desarrollo de nuevas funciones no interfiriera con la fusión del núcleo común de Android. Las ramas se crearon antes del lanzamiento de postre asociado y reciben fusiones regulares de LTS, pero no nuevas funciones. Por ejemplo, android-4.9-q recibe fusiones de la rama 4.9.y LTS.

Si una versión del kernel no era un kernel de lanzamiento, no se creó ningún kernel de postre, pero el kernel asociado con la versión más reciente de la plataforma es válido para actualizar a futuras versiones de la plataforma Android. Por ejemplo, android-4.4-p era el último de los android-4.4* ramas de postre, por lo que es apoyado y probado con su versión de la plataforma original, Android 9 (PIE). También es compatible y probado con las versiones de la plataforma que admiten actualizaciones de dispositivos que ejecutan kernels 4.4: Android 10 y Android 11.

Debido a que el esquema de postre de nomenclatura para los lanzamientos de la plataforma Android se dejó caer con Android 10, los últimos comunicados de postre que habrían sido llamados android-4.14-r y android-4.19-r en cambio se denominan android-4.14-stable y android-4.19-stable .

Los kernels de postre son reemplazados por los kernels de KMI que comienzan con Android 11, por lo que la lista completa de kernels de postre compatibles se encuentra en esta tabla.

Lanzamiento de la plataforma Android Núcleo Soportado hasta
Android 8.1 (Oreo) android-4.4-o
android-4.9-o
Junio ​​2021
Android 9 (Pie) android-4.4-p
android-4.9-p
android-4.14-p
Enero de 2022
Android 10 android-4.9-q
android-4.14-q
android-4.19-q
Enero 2023
Android 11 android-4.14-stable
android-4.19-stable
Enero 2024

Ramas de kernel de versiones heredadas

Núcleos de liberación se mantienen para proporcionar backports de parches citados en la publicación mensual del boletín de seguridad de Android . Fueron creados para cada kernel de lanzamiento cuando había una nueva versión de la plataforma Android. Están en desuso cuando la versión del núcleo o de la plataforma asociada está en desuso como se describe en tiempos de vida de soporte y parches de seguridad .

Cada mes, cuando se publica el Boletín de seguridad de Android, estos kernels se actualizan con versiones posteriores de los parches citados en el boletín que son relevantes para los kernels upstream y los kernels comunes de Android. No reciben parches LTS, por lo que el número de versión menor nunca cambia. No contienen backports para parches específicos de proveedores.

En Android 11 y versiones posteriores de la plataforma, los socios deben fusionarse desde los kernels de postre o KMI para aplicar los parches citados en el Boletín de seguridad de Android. No se creará ningún kernel de lanzamiento para Android 11 o versiones posteriores de la plataforma.

Por lo tanto, en esta tabla se muestra la lista completa de los 14 núcleos de lanzamiento y no se agregará ninguno.

Lanzamiento de la plataforma Android Núcleo Soportado hasta
Android 8.0 (Oreo) android-3.18-o-release
android-4.4-o-release
android-4.9-o-release
Enero de 2021
Android 8.1 (Oreo MR1) android-3.18-o-mr1
android-4.4-o-mr1
android-4.9-o-mr1
Junio ​​2021
Android 9 (Pie) android-4.4-p-release
android-4.9-p-release
android-4.14-p-release
Enero de 2022
Android 10 android-4.9-q-release
android-4.14-q-release
android-4.19-q-release
Enero 2023

Característica y lanzamiento de kernels

Cada versión de la plataforma Android admite el lanzamiento de nuevos dispositivos basados ​​en cualquiera de las tres versiones del kernel de Linux. Como se muestra en la siguiente tabla, los núcleos de lanzamiento para Android 11 son android-4.14-stable , android-4.19-stable , y android11-5.4 .

Debido a que las actualizaciones del kernel generalmente no son necesarias cuando se actualiza la versión de la plataforma, los kernels a los que les faltan las funciones más recientes para una versión de la plataforma aún se pueden usar para iniciar dispositivos. Por lo tanto granos que fueron diseñados para Android 10, como android-4.19-q , se pueden utilizar en dispositivos incluso después de actualizar la versión de la plataforma para Android 11. Comenzando con Android 12, habrá un menor número de granos de características de lanzamiento núcleos para limitar el número de KMI estables que deben ser compatibles.

Lanzamiento de la plataforma Android Lanzamiento de kernels Núcleos de características
Android 9 (2018) android-4.4-p
android-4.9-p
android-4.14-p
android-4.4-p
android-4.9-p
android-4.14-p

Android 10 (2019) android-4.9-q
android-4.14-q
android-4.19-q

android-4.9-q
android-4.14-q
android-4.19-q
Android 11 (2020) android-4.14-stable
android-4.19-stable
android11-5.4
android-4.14-stable
android-4.19-stable
android11-5.4
Android 12 (2021) android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
android12-5.4
android12-5.10
Android T (experimental AOSP) (2022) 1 android12-5.4
android12-5.10
android13-5.10
android13-5.x
android13-5.10
android13-5.x 2

1 androide T (experimental AOSP) (2022) no está comprometida y se muestra solo a demostrar cómo el nuevo modelo de ramificación progresará en el futuro con dos y tres núcleos función de lanzamiento.

2 Donde 5.x es la versión del núcleo seleccionado como LTS al final de 2021.

Jerarquía de kernel común

Ramificación desde android-mainline

El nivel superior de la jerarquía de kernel común se muestra en la Figura 1.

Creación de núcleos comunes desde el núcleo de Android-mainline

Figura 1. La creación de núcleos comunes de android-línea principal del núcleo

Tenga en cuenta que el nuevo kernel de Android común android12-5.10 se brotado de android-mainline en 2020. En 2021, cuando se declara la próxima LTS, android13-5.x (donde 5.xy es la versión del núcleo seleccionado como LTS) se ramifican desde android-mainline .

Como se muestra en la Figura 1, cada versión de kernel es la base de dos kernels de KMI. Por ejemplo, los dos núcleos V5.4 son android11-5.4 y android12-5.4 , ambos de los cuales son núcleos de características para sus respectivos comunicados de la plataforma. Este será el caso también para 5.10; android12-5.10 fue creada cuando el LTS fue declarado y android13-5.10 se ramifican desde android12-5.10 en la función kernel hito completa en la primavera de 2021 para permitir el desarrollo de características para Android T (experimental AOSP).

Ciclo de vida de la sucursal de KMI

El ciclo de vida de una rama de KMI se muestra a continuación en la Figura 2.

5.10 ciclo de vida de la sucursal de KMI

Figura 2. 5,10 KMI rama ciclo de vida

Para aclarar el proceso de desarrollo y el ciclo de vida de las sucursales, la Figura 2 se centra en las sucursales de KMI para 5.10.

Cada rama de KMI recorre tres fases indicadas en la Figura 2 por diferentes colores en cada rama. Como se muestra, LTS se fusiona regularmente independientemente de la fase.

Fase de desarrollo

Cuando se ha creado, una rama KMI entra en la fase de desarrollo (DEV en la Figura 2), y está abierto a las contribuciones de función para la próxima versión de la plataforma Android. En la Figura 2, android12-5.10 fue creado cuando 5.10 fue declarado como el nuevo núcleo LTS aguas arriba. La segunda rama de KMI para una versión del kernel podría crearse antes para permitir el desarrollo de la versión posterior. En la Figura 2, android13-5.10 se crea cuando android12-5.10 transiciones de la fase de desarrollo.

Fase de estabilización

Cuando la rama KMI se declara completa característica, se entra en la fase de estabilización, etiquetado como arma blanca en la figura 2. El socio características y correcciones de errores Todavía se aceptan, pero el seguimiento de KMI está habilitado para detectar cualquier cambio que afectan a la interfaz. En esta fase, se aceptan los cambios que rompen el KMI, pero la definición de KMI debe actualizarse según sea necesario. Ver el panorama general GKI para obtener detalles sobre la vigilancia KMI.

Fase congelada de KMI

Antes de una nueva versión de la plataforma es empujado a AOSP, la rama KMI se congela y permanece congelada durante el tiempo de vida de la rama. Esto significa que no se aceptan cambios que rompan la KMI a menos que se identifique un problema de seguridad grave que no se pueda mitigar sin afectar la KMI estable. Para evitar roturas de KMI, algunos parches combinados de LTS pueden modificarse o descartarse si la solución no es necesaria para los dispositivos Android.

Cuando se congela una rama de KMI, se pueden aceptar correcciones de errores y funciones de socios siempre que no se rompa el kernel común de KMI existente. La KMI se puede ampliar con nuevos símbolos exportados siempre que las interfaces que componen la KMI actual no se vean afectadas. Cuando se agregan nuevas interfaces a la KMI, se vuelven estables de inmediato y no pueden romperse con cambios futuros.

Por ejemplo, no se permite un cambio que agrega un campo a una estructura utilizada por un kernel común de la interfaz KMI porque cambia la definición de la interfaz:

struct foo {
  int original_field1;
  int original_field2;
  int new_field;  // Not allowed
};

int do_foo(struct foo &myarg)
{
  do_stuff(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);

Sin embargo, agregar una nueva función está bien:

struct foo2 {
  struct foo orig_foo;
  int new_field;
};

int do_foo2(struct foo2 &myarg)
{
  do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);

Durante la vida útil del kernel de KMI, se mantiene la compatibilidad con versiones anteriores con el espacio de usuario para que el kernel se pueda utilizar de forma segura para la versión de la plataforma Android con la que se lanzó el dispositivo. Las pruebas continuas con versiones anteriores garantizan que se mantenga la compatibilidad. Así en la figura 2, la android12-5.10 kernel se puede utilizar para Android 12 dispositivos y Android T (experimental AOSP) dispositivos. Debido a que la versión de la plataforma Android también es compatible con las versiones anteriores, el android12-5.4 núcleo puede ser usada para Android T (experimental AOSP) dispositivos ya sea para su lanzamiento o actualización.

Al entrar en la fase congelada, la rama se etiqueta con git con la cadena de versión de KMI que contiene el número de generación de KMI. Por ejemplo, cuando android11-5.4 fue congelado, que fue etiquetado con la versión de cadena KMI 5.4-android11-0 donde el trasero 0 es el número de generación KMI. Si hay un problema de seguridad u otro evento que requiera que se acepte un parche de cambio de KMI, se incrementa el número de generación de KMI y se vuelve a etiquetar la sucursal. Por ejemplo, si tal cambio es aceptado en android11-5.4 , la rama se etiquetará con la nueva versión KMI, 5.4-android11-1 . La actual generación KMI se puede encontrar utilizando el uname comando:

$ uname -r
5.4.61-android11-0-00153-ga972f59040e4

El número después del lanzamiento de la plataforma es la generación de KMI (0 en este caso).

Si la generación de KMI cambia, el kernel no es compatible con los módulos del proveedor que se ajustan a la generación de KMI anterior, por lo que los módulos deben reconstruirse y actualizarse de forma sincrónica con el kernel. Se espera que los cambios de generación de KMI sean muy raros.

Compatibilidad entre kernels

Los requisitos de compatibilidad entre núcleos de la misma familia LTS están cambiando a partir de los nuevos núcleos KMI.

Núcleos de KMI

Los nuevos kernels de KMI mantienen la compatibilidad con todas las versiones de la plataforma Android que admitían la versión del kernel. Además, las versiones de la plataforma Android son compatibles con los kernels de KMI de versiones anteriores. Así que usted puede utilizar con seguridad la android12-5.4 kernel desarrollado para Android 12 en dispositivos con Android T (experimental AOSP). La compatibilidad se verifica mediante pruebas continuas de VTS y CTS de los kernels de KMI con todas las versiones compatibles.

La KMI es estable, por lo que el kernel se puede actualizar sin necesidad de reconstruir los módulos del kernel en la imagen del proveedor.

La compatibilidad de KMI no se mantiene entre diferentes kernels de KMI. Así, por ejemplo, un android12-5.10 no puede ser reemplazado por un android13-5.10 núcleo sin la reconstrucción de todos los módulos.

Los kernels de KMI solo son compatibles con sus versiones iniciales y posteriores. No son compatibles con versiones anteriores. Por lo que un android13-5.10 núcleo no está soportada en Android 12 dispositivos.

Kernels heredados

Los granos legado postre ( *-o , *-p , *-q , *-stable ) no son compatibles hacia atrás a través de comunicados de la plataforma Android, pero los núcleos de las dos versiones anteriores de la plataforma Android son compatibles con la actualización. Por lo tanto, un dispositivo lanzado con Android 10 usando un núcleo basado en android-4.19-q o bien puede seguir utilizando el android-4.19-q núcleo cuando se actualice a Android 2020, o actualizar el código específico del proveedor de soporte android-4.19-stable .

Matriz de compatibilidad

Esta tabla muestra las versiones de kernel compatibles y probadas con cada versión de la plataforma Android.

Lanzamiento de la plataforma Android Núcleos compatibles para actualización Núcleos admitidos para el lanzamiento
Android 9 (2018) android-3.10
android-3.18
android-4.4-o
android-4.9-o
android-4.4-p
android-4.9-p
android-4.14-p
Android 10 (2019) android-3.18
android-4.4-o
android-4.9-o
android-4.4-p
android-4.9-p
android-4.14-p
android-4.9-q
android-4.14-q
android-4.19-q
Android 11 (2020) android-4.4-o
android-4.4-p
android-4.9-o
android-4.9-p
android-4.9-q
android-4.14-p
android-4.14-q
android-4.19-q
android-4.14-stable
android-4.19-stable
android11-5.4
Android 12 (2021) android-4.9-o
android-4.9-p
android-4.9-q
android-4.14-p
android-4.14-q
android-4.19-q
android-4.14-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10

Soporte de por vida y parches de seguridad

Los kernels comunes de Android son compatibles hasta que el kernel LTS asociado o la versión de la plataforma Android ya no sean compatibles. Si bien se admite un kernel, continúa recibiendo fusiones LTS de versiones anteriores y correcciones de errores para el código específico de Android. Estas soluciones incluyen todos los parches de seguridad del kernel citan en las mensuales Android Boletines de seguridad que son relevantes para los núcleos comunes Android.

Los socios pueden estar seguros de que al fusionarse regularmente desde los kernels comunes de Android, obtienen todos los parches de seguridad del kernel posibles.

Prueba de kernel común

Los núcleos comunes se prueban con varios sistemas de CI, además de las pruebas posteriores realizadas por los proveedores.

Pruebas funcionales del kernel de Linaro

Linaro Kernel funcionales Testing (LKFT) pruebas inician varios conjuntos de pruebas incluyendo kselftest, LTP, VTS, y CTS en un conjunto de dispositivos ARM32 y arm64 físicas. Los recientes resultados de las pruebas se pueden encontrar aquí .

Prueba de KernelCI

KernelCI pruebas de acumulación y de la inicialización se inician cada vez que un nuevo parche se ha comprometido a una rama del núcleo común. Se prueban y arrancan varios cientos de configuraciones de compilación en varias placas. Los resultados recientes de núcleos Android se pueden encontrar aquí .

Pruebas de preenvío y posenvío de Android

Las pruebas de preenvío se utilizan para evitar que se introduzcan fallos en los núcleos comunes. Los resultados no están disponibles públicamente en este momento.

Prueba postsubmit Android se lleva a cabo cuando un nuevo parche se ha comprometido a una rama del núcleo común. Mediante la introducción de aosp_kernel como un nombre de rama parcial, se ve una lista de las ramas del kernel con resultados disponibles. Por ejemplo, los resultados para android-mainline se pueden encontrar aquí .

Prueba de 0 días

0-día lleva a cabo la prueba del parche por parche de prueba en todas las ramas del núcleo común de Android cuando se cometen los nuevos parches. Se ejecutan varias pruebas de arranque, funcionales y de rendimiento. Unirse al grupo público cros-kernel-buildreports

Matriz de prueba

Kernel común de Android Lanzamientos de la plataforma Android Suites de prueba
Maestría 12 11 10 9 (pastel) LKFT KernelCI Pre Enviar Publicar Enviar 0 días
android-mainline
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android-4.14-stable
android-4.19-q
android-4.14-q
android-4.9-q
android-4.14-p
android-4.9-p
android-4.4-p

Contribución a los núcleos comunes de Android

Generalmente, el desarrollo de funciones debe realizarse en la línea principal de Linux y no en los núcleos comunes de Android. Se recomienda encarecidamente el desarrollo ascendente y, una vez que se acepta el desarrollo allí, se puede exportar fácilmente a la rama ACK específica según sea necesario. El kernel de Android Team se complace en apoyar los esfuerzos de actividades previas en beneficio del ecosistema Android.

Enviar parches a Gerrit y se ajustan a estas directrices de contribución .