Arnd Bergmann, responsable de los paquetes del núcleo en SUSE, publicó en la lista de correo de desarrolladores del núcleo de Linux un plan para eliminar del núcleo y las herramientas de compilación basadas en GCC el código de soporte para las antiguas CPUs ARM y los ABI relacionados, conjuntos de instrucciones y características del núcleo. El plan está actualmente en fase de RFC, es decir, está abierto a discusión por parte de la comunidad. En caso de aprobación, se propone comenzar la eliminación de las viejas CPUs ARM en el núcleo de Linux 6.12, cuyo lanzamiento se espera en diciembre. Los primeros candidatos para eliminación son ARMv4 (sin eliminar ARMv4T), iWMMXt, BE32 y OABI.
La finalización del soporte para las antiguas CPUs ARM en el núcleo se alinea con la finalización de su soporte en GCC; parte de las CPUs propuestas para eliminación ya no están soportadas en las ramas recientes de GCC, y algunas se planea eliminarlas en futuras versiones, lo que simplificará la modernización e implementación de nuevas características en el compilador. La eliminación del soporte de la arquitectura en GCC requerirá también su eliminación del núcleo en caso de que se aumente la versión mínima soportada por el núcleo de GCC (actualmente, se requiere al menos la versión 5.1 de GCC para compilar el núcleo).
Arquitecturas, chips y extensiones que se proponen eliminar del núcleo:
- ARMv3 — el soporte ya se ha terminado en GCC 9.
- ARMv4 — se utiliza para los procesadores StrongARM y FA526 que todavía están en uso, siendo los más nuevos de estos chips lanzados hace aproximadamente 20 años. El soporte para ARMv4 se ha terminado en Debian 5.0. Se propone inicialmente detener el soporte para ARMv4 en GCC, y después de unos años, también en el núcleo.
- ARMv4T — hay 6 familias de SoC con núcleos ARM720T, ARM920T y ARM922T que son más comunes que las SoC basadas en ARMv4. El soporte para ARMv4T se terminó en Debian 9.0. En el núcleo, se planea detener el soporte para ARMv4T, no antes de finalizar el soporte para ARMv5.
- ARMv5 — se utiliza en alrededor de 1/3 de todas las plataformas soportadas en el núcleo, pero la mayoría de estas plataformas están cerca del final de su ciclo de vida. Debian continúa soportando ARMv5, pero debido a la falta de FPU y operaciones atómicas, mantener el soporte se está volviendo cada vez más difícil, y probablemente en breve, el puerto de Debian para ARMv5 será trasladado a la categoría de no oficial.
- Las primeras generaciones de ARMv6 — se utilizan en SoCs como ARM1136r0p (NXP i.MX31) y OMAP24xx (Nokia N8xx), pero su soporte requiere hacks para trabajar en núcleos con SMP.
- ARMv6K — se utiliza en ARM1176 (Raspberry Pi 1, AST2500) y ARM1136r1. No hay obstáculos en el núcleo para detener el soporte, pero hay dificultades en las distribuciones debido a la incompatibilidad con el conjunto de instrucciones armv7-a+vfpv3-d16.
- ARMv7-M — se utiliza en microcontroladores basados en Cortex-M3/M4/M7, que siguen siendo los últimos chips soportados en el núcleo sin controladores de memoria (MMU). El trabajo en núcleos en sistemas sin MMU se detuvo en 2017, tras la transición hacia el desarrollo de RTOS, como Zephyr, para estos chips. Se propone eliminar el soporte para ARMv7-M en 2027, diez años después de que se detuviera el desarrollo, a pesar de la continuidad del soporte en GCC.
- iWMMXt — el soporte para la CPU ARMv7 PJ4 (MMP2, Berlín) ya se ha detenido en el núcleo, después de lo cual no quedan sistemas en uso que utilicen este conjunto de instrucciones. El soporte para iWMMXt ya ha sido retirado en Clang y se sugiere su eliminación en GCC.
- BE32 (big endian ARMv5) — se utiliza únicamente en un SoC Intel IXP4xx. En las versiones antiguas de Debian, solo se soportaba el modo little-endian, pero aún quedan problemas sin resolver en los controladores. Se propone eliminar el soporte para BE32 de GCC y del núcleo, ya que nadie ha intentado corregir los problemas en los controladores en varios años.
- BE8 (big-endian ARMv7) — hay problemas en muchos controladores, se ha detenido la prueba de funcionamiento y no hay información sobre dispositivos aún en uso. El modo BE8 puede ser interesante para probar componentes del espacio de usuario en sistemas big-endian, por lo que se planea mantener el soporte para BE8 en el núcleo y en GCC por al menos algunos años más hasta que comience a causar problemas.
Funciones del núcleo de Linux propuestas para eliminación:
- La estructura param_struct, utilizada antes de ATAGS (ARM Tag-Area) — fue declarada obsoleta en 2001, pero aún se utiliza en el código de las plataformas RiscPC y Footbridge.
- Los archivos con parámetros basados en la estructura ATAGS (utilizada para transmitir información de configuración antes del Device Tree) — quedan 29 archivos en el núcleo relacionados con 10 plataformas SoC que utilizan ATAGS.
- OABI (Old ABI, viejo ABI para la arquitectura ARM) se usa casi en todas partes ahora EABI (Embedded ABI). OABI es la causa de muchos errores, ya que los desarrolladores de controladores han dejado de tener en cuenta algunas características asociadas. El soporte para OABI al compilar componentes para el espacio de usuarios se ha descontinuado en GCC 4.8, pero para el núcleo se ha dejado la bandera «-mabi=apcs-gnu». Se sugiere dejar OABI por ahora, pero complicar su inclusión por inadvertencia.
- El modo de compatibilidad con OABI (OABI_COMPAT) permite ejecutar archivos ejecutables compilados para OABI utilizando un núcleo con EABI. Surgen problemas específicos en los controladores debido a la incompatibilidad con ioctl, pero el esfuerzo de mantenimiento de este modo es notablemente menor que el mantenimiento de núcleos con OABI. Para mantener el soporte de StrongARM, será prudente conservar el soporte para OABI o OABI_COMPAT.
- NWFPE (No Floating Point Emulator, emulador para realizar operaciones con punto flotante) — se propusieron parches para eliminarlo hace 11 años, pero se requiere NWFPE para el funcionamiento de algunos componentes del espacio de usuario compilados para OABI, por lo que se recomienda mantener el soporte de NWFPE mientras que siga habiendo soporte para OABI o OABI_COMPAT en el núcleo.
- Highmem (utilizado para gestionar la memoria en áreas después de 1 GB) — la mayoría de los sistemas ARM pueden funcionar sin habilitar highmem o pueden utilizar CONFIG_VMSPLIT_2GB para acceder a los primeros 2 GB de memoria física. Se está trabajando en la organización del acceso a 4 GB de RAM en sistemas con LPAE (Cortex-A7/A15), después de lo cual el soporte para Highmem puede ser eliminado.
- Sparsemem — se requiere para sistemas que necesitan highmem.
Plataformas propuestas para eliminación:
- RiscPC — la más antigua de las plataformas soportadas en el núcleo. No se soporta en GCC a partir de la rama 9.x debido a la eliminación del soporte para ARMv3. El mantenedor continúa probando el funcionamiento del núcleo en esta plataforma, pero parece que ya no hay usuarios reales, por lo que el soporte podría ser descontinuado si pierde el interés del mantenedor.
- SA1100, Footbridge — plataformas obsoletas, mantenidas más que nada por nostalgia. Casi todos los archivos de descripción de placas para estas plataformas fueron eliminados en el núcleo 6.3, solo queda soporte para los dispositivos ipaq h3600, assabet, netwinder y ebsa285. La cuestión de eliminar depende de las intenciones del mantenedor.
- Gemini, Moxart — utilizan CPU basados en ARMv4. Los chips fueron producidos hace más de 20 años, pero su soporte no requiere esfuerzos adicionales en mantenimiento, por lo que no tiene sentido eliminarlos hasta que se retire la plataforma StrongARM.
- Los archivos para el soporte de la plataforma PXA están en desuso y han caído en desuso; si no hay un regreso de interés, se planea eliminarlos a principios de 2025.
- OMAP1 — por un lado, sigue siendo la única plataforma basada en ARMv4T/ARMv5 sin soporte para Device Tree y no se observan movimientos hacia la transición a Device Tree, pero por el otro lado, la plataforma aún tiene usuarios.
- Nspire, AT91RM9200, CLPS711X, EP93xx, iMX1 — utilizan CPU basados en ARMv4T. Se está trabajando en la conversión de las descripciones de las placas a Device Tree, pero el sentido de mantenerlas sigue siendo solo mientras se mantenga el soporte para ARMv5.
- OMAP24xx — es la única plataforma basada en ARMv6 que tiene usuarios activos. El mantenimiento del soporte depende de la continuidad del soporte para el CPU arm1136r0.
- iMX31 — no hay información sobre usuarios activos, pero no tiene sentido eliminarla antes que OMAP2.
- S3C64xx (Cragganmore) — es la única plataforma sin soporte para Device Tree, construida sobre ARMv6K. La plataforma continúa usándose para probar códecs de audio, por lo que la eliminación se ha pospuesto hasta que las pruebas se trasladen a otra placa.
- Orion5x, mv78xx0 — se planea considerar el tema de la eliminación a principios del próximo año.
- iMX35, WM8750, AST2500, BCM2835 — tienen un buen soporte y usuarios activos, no se planea eliminarlos por ahora.
- stm32f4/f7/h7 — microcontroladores sin MMU, el mantenimiento en el núcleo continúa y hay usuarios activos. Se planea considerar la eliminación en 2026.
Fuente: opennet.ru
