Plan pentru încetarea suportului procesorilor vechi ARM în nucleul Linux

Arnd Bergmann, responsabil cu pachetele kernel în SUSE, a publicat pe lista de discuții a dezvoltatorilor kernel Linux un plan pentru eliminarea din kernel și din instrumentele de compilare bazate pe GCC a codului pentru suportul procesorilor CPU ARM vechi și a ABI-urilor, seturilor de instrucțiuni și capacităților asociate. Planul este în prezent într-o etapă RFC, adică este supus discuției comunității. În cazul aprobării planului, eliminarea procesoarelor ARM vechi este propusă să înceapă în kernelul Linux 6.12, al cărui release este așteptat în decembrie. Primele candidate pentru eliminare sunt ARMv4 (fără eliminarea ARMv4T), iWMMXt, BE32 și OABI.

Interzicerea suportului pentru vechile CPU ARM în kernel coincide cu încetarea suportului acestora în GCC — unele din procesoarele propuse pentru eliminare nu mai sunt susținute în versiunile recente ale GCC, iar unele sunt planificate pentru a fi eliminate în viitoarele versiuni, ceea ce va simplifica modernizarea și implementarea de noi funcționalități în compilator. Eliminarea suportului pentru arhitectură în GCC va necesita eliminarea acestuia și din kernel în cazul în care versiunea minimă susținută de kernel este actualizată (în prezent, pentru compilarea kernel-ului este necesară cel puțin versiunea GCC 5.1).

Arhitecturi, cipuri și extensii propuse pentru eliminare din kernel:

  • ARMv3 — suportul a fost deja încetat în GCC 9.
  • ARMv4 — este folosit pentru procesoarele StrongARM și FA526, care sunt încă în uz, iar cele mai noi dintre aceste cipuri au fost lansate acum aproximativ 20 de ani. Suportul pentru ARMv4 a fost încetat în Debian 5.0. Se propune să se înceteze inițial suportul ARMv4 în GCC, iar în câțiva ani și în kernel.
  • ARMv4T — există 6 familii SoC cu nuclee ARM720T, ARM920T și ARM922T, care sunt mai răspândite decât SoC bazate pe ARMv4. Suportul pentru ARMv4T a fost încetat în Debian 9.0. În kernel, suportul pentru ARMv4T este planificat să fie eliminat, nu mai devreme de încetarea suportului pentru ARMv5.
  • ARMv5 — este folosit pe aproximativ 1/3 din toate platformele susținute de kernel, dar majoritatea acestor platforme sunt aproape de sfârșitul ciclului de viață. Debian continuă să susțină ARMv5, dar din cauza lipsei FPU și a operațiunilor atomice, păstrarea suportului devine tot mai dificilă și, probabil, în curând, portul Debian pentru ARMv5 va fi trecut în categoria neoficială.
  • Generațiile inițiale de ARMv6 — sunt folosite în SoC-uri precum ARM1136r0p (NXP i.MX31) și OMAP24xx (Nokia N8xx), dar suportul lor necesită hack-uri pentru a funcționa în kernel-uri cu SMP.
  • ARMv6K — utilizat în ARM1176 (Raspberry Pi 1, AST2500) și ARM1136r1. Nu există obstacole în kernel pentru încetarea suportului, dar în distribuții apar dificultăți din cauza neconformității cu setul de instrucțiuni armv7-a+vfpv3-d16.
  • ARMv7-M — utilizat în microcontrolerele bazate pe Cortex-M3/M4/M7, care rămân ultimele cipuri acceptate în kernel fără unitate de gestionare a memoriei (MMU). Lucrările la nuclee pentru sisteme fără MMU s-au oprit în 2017, după ce suportul pentru astfel de cipuri a fost mutat pe dezvoltarea RTOS, cum ar fi Zephyr. Se propune eliminarea suportului pentru ARMv7-M în 2027, la 10 ani după încetarea dezvoltării, în ciuda continuării suportului în GCC.
  • iWMMXt — suportul pentru CPU ARMv7 PJ4 (MMP2, Berlin) a fost deja sistat în kernel, după care nu au rămas sisteme în uz care să utilizeze acest set de instrucțiuni. Suportul pentru iWMMXt a fost deja încetat în Clang și se propune eliminarea din GCC.
  • BE32 (big endian ARMv5) — utilizat doar într-un SoC Intel IXP4xx. În versiunile mai vechi de Debian, a fost susținut doar modul little-endian, dar în drivere rămân probleme nerezolvate. Se propune eliminarea suportului BE32 din GCC și kernel, deoarece în drivere nimeni nu a încercat să corecteze problemele în câțiva ani.
  • BE8 (big-endian ARMv7) — multe drivere au probleme, testarea a fost oprită și nu există informații despre dispozitivele în uz rămase. Modul BE8 poate prezenta interes pentru testarea componentelor spațiului utilizator pe sisteme big-endian, de aceea se plănuiește păstrarea suportului BE8 în kernel și GCC pentru cel puțin câțiva ani înainte de a începe să provoace probleme.

Funcționalitățile propuse pentru eliminare din kernelul Linux:

  • Structura param_struct, utilizată înainte de ATAGS (ARM Tag-Area) — a fost declarată învechită încă din 2001, dar este încă utilizată în codul pentru platformele RiscPC și Footbridge.
  • Fișierele cu parametrii bazate pe structura ATAGS (folosită pentru transmiterea informațiilor despre configurare înainte de Device Tree) — în kernel rămân 29 de fișiere legate de 10 platforme SoC care folosesc ATAGS.
  • OABI (Old ABI, vechi ABI pentru arhitectura ARM) — acum aproape universal se folosește EABI (Embedded ABI). OABI este cauza multor erori, deoarece dezvoltatorii de drivere au încetat să ia în considerare anumite caracteristici asociate. Suportul pentru OABI în compilarea componentelor pentru spațiul utilizatorului a fost încheiat în GCC 4.8, dar pentru nucleu a fost păstrat un flag „-mabi=apcs-gnu”. Se recomandă deocamdată păstrarea OABI, dar complicarea activării sale din neatenție.
  • Modul de compatibilitate cu OABI (OABI_COMPAT) — permite rularea fișierelor executabile compilate pentru OABI, folosind un nucleu cu EABI. Există probleme separate în drivere din cauza incompatibilității cu ioctl, dar efortul necesar pentru întreținerea acestui mod este semnificativ mai mic decât întreținerea nucleelor cu OABI. Pentru a menține suportul pentru StrongARM, ar fi rațional să păstrăm suportul OABI sau OABI_COMPAT.
  • NWFPE (No Floating Point Emulator, emulator pentru operații cu punct flotant) — patch-uri pentru eliminare au fost propuse cu 11 ani în urmă, dar NWFPE este necesar pentru funcționarea unor componente ale spațiului utilizatorului compilate pentru OABI, prin urmare, se recomandă păstrarea suportului NWFPE până când suportul pentru OABI sau OABI_COMPAT rămâne în nucleu.
  • Highmem (utilizat pentru gestionarea memoriei în zonele de peste 1 GB) — majoritatea sistemelor ARM pot funcționa fără activarea highmem sau pot utiliza CONFIG_VMSPLIT_2GB pentru accesarea primelor 2GB de memorie fizică. Se lucrează pentru a organiza accesul la 4 GB RAM pe sistemele cu LPAE (Cortex-A7/A15), după finalizarea căruia suportul pentru Highmem poate fi eliminat.
  • Sparsemem — necesar pentru sistemele care au nevoie de highmem.

Platformele propuse pentru eliminare:

  • RiscPC — cea mai veche dintre platformele suportate în nucleu. Nu este suportată în GCC, începând cu ramura 9.x din cauza eliminării suportului pentru ARMv3. La urma urmei, îngrijitorul continuă să testeze funcționarea nucleului pe această platformă, dar din câte se pare nu mai există utilizatori reali, prin urmare suportul poate fi încheiat în cazul pierderii interesului îngrijitorului.
  • SA1100, Footbridge — platforme învechite, păstrate mai degrabă din motive de nostalgie. Aproape toate fișierele cu descrierea plăcilor pentru aceste platforme au fost șterse în nucleul 6.3, rămânând doar suportul pentru dispozitivele ipaq h3600, assabet, netwinder și ebsa285. Întrebarea privind eliminarea depinde de intențiile îngrijitorului.
  • Gemini, Moxart — folosesc CPU-uri bazate pe ARMv4. Cipurile au fost produse acum mai bine de 20 de ani, dar suportul lor nu necesită eforturi suplimentare de întreținere, așa că nu are sens să le eliminăm până la dispariția platformei StrongARM.
  • Fișierele necesare pentru suportul platformei PXA sunt abandonate și au ieșit din uz; dacă interesul pentru ele nu va reveni, acestea urmează să fie eliminate la începutul anului 2025.
  • OMAP1 rămâne, pe de o parte, singura platformă bazată pe ARMv4T/ARMv5 fără suport Device Tree și nu se observă vreo mișcare de tranziție către Device Tree, dar, pe de altă parte, platforma are în continuare utilizatori.
  • Nspire, AT91RM9200, CLPS711X, EP93xx, iMX1 — folosesc CPU-uri bazate pe ARMv4T. Se lucrează la migrarea descrierilor plăcilor pe Device Tree, dar sensul menținerii lor rămâne doar câtă vreme se păstrează suportul pentru ARMv5.
  • OMAP24xx este singura platformă bazată pe ARMv6 care are utilizatori activi. Menținerea suportului depinde de păstrarea suportului pentru CPU arm1136r0.
  • iMX31 — nu sunt informații despre existența utilizatorilor activi, dar nu are sens să fie eliminată înainte de OMAP2.
  • S3C64xx (Cragganmore) — este singura platformă fără suport Device Tree, construită pe baza ARMv6K. Platforma continuă să fie utilizată pentru testarea codec-urilor audio, așa că eliminarea este amânată până când testarea va fi transferată pe o altă placă.
  • Orion5x, mv78xx0 — problema eliminării va fi discutată la începutul anului viitor.
  • iMX35, WM8750, AST2500, BCM2835 — sunt bine susținute și au utilizatori activi, astfel că eliminarea nu este planificată în prezent.
  • stm32f4/f7/h7 — microcontrolere fără MMU, întreținerea în kernel continuă și există utilizatori activi. Problema eliminării va fi discutată în 2026.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster