Piano di cessazione del supporto per le vecchie CPU ARM nel kernel Linux

Arnd Bergmann, responsabile dei pacchetti core in SUSE, ha pubblicato nella mailing list degli sviluppatori del kernel Linux un piano per rimuovere dal kernel e dagli strumenti di compilazione basati su GCC il codice per il supporto delle vecchie CPU ARM e dei relativi ABI, set di istruzioni e funzionalità del kernel. Il piano è attualmente in fase di RFC, cioè aperto alla discussione della comunità. In caso di approvazione del piano, la rimozione delle vecchie CPU ARM è prevista per il kernel Linux 6.12, il cui rilascio è atteso a dicembre. I primi candidati per la rimozione sono ARMv4 (senza rimuovere ARMv4T), iWMMXt, BE32 e OABI.

La cessazione del supporto per le vecchie CPU ARM nel kernel si sovrappone alla cessazione del loro supporto in GCC: alcune delle CPU proposte per la rimozione non sono più supportate nelle versioni recenti di GCC e alcune si prevedono di rimuovere nelle versioni future, semplificando così la modernizzazione e l'implementazione di nuove funzionalità nel compilatore. La rimozione del supporto dell'architettura in GCC richiederà la rimozione del supporto anche dal kernel in caso di aumento della versione minima supportata di GCC (attualmente per compilare il kernel è necessaria almeno la versione GCC 5.1).

Architetture, chip e estensioni che si propongono di rimuovere dal kernel:

  • ARMv3 — il supporto è già stato interrotto in GCC 9.
  • ARMv4 — utilizzato per i processori StrongARM e FA526 ancora in uso, con i chip più recenti di questo tipo lanciati circa 20 anni fa. Il supporto per ARMv4 è stato interrotto in Debian 5.0. Si propone inizialmente di interrompere il supporto per ARMv4 in GCC e, alcuni anni dopo, nel kernel.
  • ARMv4T — sono in uso 6 famiglie di SoC con i core ARM720T, ARM920T e ARM922T, che sono più diffusi dei SoC basati su ARMv4. Il supporto per ARMv4T è stato interrotto in Debian 9.0. Nel kernel si prevede di interrompere il supporto per ARMv4T, non prima di aver interrotto il supporto per ARMv5.
  • ARMv5 — utilizzato su circa 1/3 di tutte le piattaforme supportate dal kernel, ma la maggior parte di queste piattaforme sta per raggiungere la fine del ciclo di vita. Debian continua a supportare ARMv5, ma a causa della mancanza di FPU e operazioni atomiche, mantenere il supporto diventa sempre più difficile e, con ogni probabilità, a breve il port di Debian per ARMv5 sarà trasferito nella categoria non ufficiali.
  • Le prime generazioni di ARMv6 — utilizzate in SoC come ARM1136r0p (NXP i.MX31) e OMAP24xx (Nokia N8xx), ma il loro supporto richiede hack per funzionare nei kernel SMP.
  • ARMv6K — utilizzato in ARM1176 (Raspberry Pi 1, AST2500) e ARM1136r1. Non ci sono ostacoli nel kernel per interrompere il supporto, ma ci sono difficoltà nei pacchetti a causa dell'incompatibilità con l'insieme di istruzioni armv7-a+vfpv3-d16.
  • ARMv7-M — utilizzato nei microcontrollori basati su Cortex-M3/M4/M7, che rimangono gli ultimi chip supportati nel kernel senza un'unità di gestione della memoria (MMU). I lavori sulle architetture senza MMU sono stati interrotti nel 2017, dopo il passaggio allo sviluppo di RTOS, come Zephyr, per quei chip. È stato proposto di rimuovere il supporto per ARMv7-M nel 2027, dieci anni dopo la cessazione dello sviluppo, nonostante il supporto continui in GCC.
  • iWMMXt — il supporto per la CPU ARMv7 PJ4 (MMP2, Berlin) è già stato interrotto nel kernel, e non ci sono più sistemi di uso comune che utilizzano questo insieme di istruzioni. Il supporto per iWMMXt è già stato interrotto in Clang e si propone di rimuoverlo da GCC.
  • BE32 (big endian ARMv5) — utilizzato solo in un SoC Intel IXP4xx. Nelle vecchie versioni di Debian era supportata solo la modalità little-endian, ma nei driver persistono problemi irrisolti. Si propone di rimuovere il supporto per BE32 da GCC e dal kernel, poiché in molti anni nessuno ha tentato di risolvere i problemi nei driver.
  • BE8 (big-endian ARMv7) — ci sono problemi in molti driver, i test sono stati interrotti e non ci sono informazioni su dispositivi di uso comune. La modalità BE8 potrebbe essere interessante per testare componenti nello spazio utente su sistemi big-endian, quindi è previsto di mantenere il supporto per BE8 nel kernel e in GCC per almeno qualche anno prima che inizi a causare problemi.

Opportunità proposte per la rimozione dal kernel Linux:

  • La struttura param_struct, utilizzata fino agli ATAGS (ARM Tag-Area) — è stata dichiarata obsoleta già nel 2001, ma è ancora utilizzata nel codice per le piattaforme RiscPC e Footbridge.
  • File di parametri basati sulla struttura ATAGS (utilizzati per trasmettere informazioni sulla configurazione fino al Device Tree) — nel kernel rimangono 29 file associati a 10 piattaforme SoC che utilizzano ATAGS.
  • OABI (Old ABI, vecchio ABI per architettura ARM) è ora quasi ovunque sostituito da EABI (Embedded ABI). OABI è causa di molti errori, poiché gli sviluppatori di driver hanno smesso di considerare alcune delle sue peculiarità. Il supporto per OABI nella costruzione dei componenti per lo spazio utente è stato interrotto in GCC 4.8, ma per il kernel è rimasto il flag «-mabi=apcs-gnu». Si propone di mantenere OABI per il momento, ma rendere più complicata l'inclusione per negligence.
  • La modalità di compatibilità con OABI (OABI_COMPAT) consente di eseguire file eseguibili compilati per OABI utilizzando un kernel EABI. Ci sono problemi specifici nei driver a causa dell'incompatibilità con ioctl, ma il costo di manutenzione di questa modalità è notevolmente inferiore rispetto alla manutenzione dei kernel con OABI. Per mantenere il supporto per StrongARM, sarebbe ragionevole mantenere il supporto per OABI o OABI_COMPAT.
  • NWFPE (No Floating Point Emulator, emulatore per operazioni in virgola mobile) - le patch per la sua rimozione sono state suggerite già 11 anni fa, ma NWFPE è necessario per il funzionamento di alcuni componenti dello spazio utente compilati per OABI, quindi si raccomanda di mantenere il supporto per NWFPE fino a quando nel kernel rimane il supporto per OABI o OABI_COMPAT.
  • Highmem (utilizzato per la gestione della memoria in aree oltre 1 GB) - la maggior parte dei sistemi ARM può funzionare senza attivare highmem o può utilizzare CONFIG_VMSPLIT_2GB per accedere ai primi 2 GB di memoria fisica. Sono in corso lavori per consentire l'accesso a 4 GB di RAM sui sistemi con LPAE (Cortex-A7/A15), dopo il quale il supporto per Highmem potrebbe essere rimosso.
  • Sparsemem - necessario per i sistemi che richiedono highmem.

Piattaforme proposte per la rimozione:

  • RiscPC - la più antica tra le piattaforme supportate nel kernel. Non è supportata in GCC a partire dalla versione 9.x a causa della rimozione del supporto per ARMv3. Il maintainer continua a testare il funzionamento del kernel su questa piattaforma, ma sembra che non ci siano più utenti reali, quindi il supporto potrebbe cessare in caso di perdita di interesse da parte del maintainer.
  • SA1100, Footbridge - piattaforme obsolete, mantenute solo per motivi di nostalgia. Quasi tutti i file di descrizione delle schede per queste piattaforme sono stati rimossi nel kernel 6.3, rimane solo il supporto per i dispositivi ipaq h3600, assabet, netwinder ed ebsa285. La questione della rimozione dipende dalle intenzioni del maintainer.
  • Gemini, Moxart — utilizzano CPU basate su ARMv4. I chip sono stati prodotti oltre 20 anni fa, ma il loro supporto non richiede sforzi aggiuntivi nella manutenzione, quindi non ha senso rimuoverli fino alla dismissione della piattaforma StrongARM.
  • I file per supportare la piattaforma PXA sono abbandonati e non sono più in uso; se l'interesse per essi non tornerà, si prevede di rimuoverli all'inizio del 2025.
  • OMAP1 — da un lato rimane l'unica piattaforma basata su ARMv4T/ARMv5 senza supporto per il Device Tree e non ci sono movimenti verso il passaggio al Device Tree, ma dall'altro lato la piattaforma ha ancora dei suoi utilizzatori.
  • Nspire, AT91RM9200, CLPS711X, EP93xx, iMX1 — utilizzano CPU basate su ARMv4T. È in corso un lavoro per convertire le descrizioni delle schede nel Device Tree, ma il senso di mantenerle rimane solo finché il supporto per ARMv5 è attivo.
  • OMAP24xx — è l'unica piattaforma basata su ARMv6, con utenti attivi. Mantenere il supporto dipende dal mantenimento del supporto per CPU arm1136r0.
  • iMX31 — non ci sono informazioni sulla presenza di utenti attivi, ma non ha senso rimuoverla prima di OMAP2.
  • S3C64xx (Cragganmore) — è l'unica piattaforma senza supporto per il Device Tree, costruita su base ARMv6K. La piattaforma continua a essere utilizzata per testare codec audio, quindi la rimozione è rinviata fino a quando i test non saranno trasferiti su un'altra scheda.
  • Orion5x, mv78xx0 — la questione della rimozione verrà discussa all'inizio del prossimo anno.
  • iMX35, WM8750, AST2500, BCM2835 — sono ben supportati e hanno utenti attivi, al momento non si prevede una rimozione.
  • stm32f4/f7/h7 — microcontrollori senza MMU, il supporto nel kernel continua e ci sono utenti attivi. La questione della rimozione verrà discussa nel 2026.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster