Piano di fine supporto per i vecchi processori ARM nel kernel Linux

Arnd Bergmann, responsabile dei pacchetti del kernel in SUSE, ha pubblicato sulla 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 di vecchi CPU ARM e dei relativi ABI, set di istruzioni e funzionalità del kernel. Il piano è attualmente in fase di RFC, ovvero esposto per discussione con la comunità. Se il piano verrà approvato, si propone di iniziare la rimozione dei vecchi processori ARM nel kernel Linux 6.12, il cui rilascio è previsto per dicembre. I primi candidati per la rimozione sono ARMv4 (senza rimuovere ARMv4T), iWMMXt, BE32 e OABI.

La cessazione del supporto per i vecchi CPU ARM nel kernel coincide con la cessazione del loro supporto in GCC: alcuni dei CPU proposti per la rimozione non sono già supportati nelle nuove branche di GCC, mentre altri si prevede di rimuoverli in futuri rilasci, il che semplificherà l'aggiornamento e l'implementazione di nuove funzionalità nel compilatore. La rimozione del supporto dell'architettura in GCC richiederà la rimozione del suo supporto anche dal kernel in caso di aumento della versione minima supportata dal kernel di GCC (attualmente per compilare il kernel è necessaria almeno la versione 5.1 di GCC).

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

  • ARMv3 — il supporto è già cessato in GCC 9.
  • ARMv4 — usato per CPU ancora in uso come StrongARM e FA526, con i chip più recenti rilasciati circa 20 anni fa. Il supporto per ARMv4 è cessato in Debian 5.0. Si propone inizialmente di cessare il supporto per ARMv4 in GCC, e dopo alcuni anni anche nel kernel.
  • ARMv4T — ci sono in uso 6 famiglie di SoC con core ARM720T, ARM920T e ARM922T, più diffuse degli SoC basati su ARMv4. Il supporto per ARMv4T è cessato in Debian 9.0. Nel kernel, la cessazione del supporto per ARMv4T è pianificata non prima della cessazione del supporto per ARMv5.
  • ARMv5 — utilizzato su circa 1/3 di tutte le piattaforme supportate nel kernel, ma la maggior parte di queste piattaforme è vicina alla 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 probabilmente presto il port di Debian per ARMv5 sarà spostato tra quelli non ufficiali.
  • Generazioni iniziali di ARMv6 — usate in SoC come ARM1136r0p (NXP i.MX31) e OMAP24xx (Nokia N8xx), ma il loro supporto richiede hack per funzionare in kernel SMP.
  • ARMv6K — utilizzato in ARM1176 (Raspberry Pi 1, AST2500) e ARM1136r1. Non ci sono impedimenti nel kernel per cessare il supporto, ma nei distribuiti ci sono complessità a causa della non conformità al tipo armv7-a+vfpv3-d16.
  • ARMv7-M — utilizzato in microcontrollori basati su Cortex-M3/M4/M7, che rimangono gli ultimi chip supportati nel kernel senza una unità di gestione della memoria (MMU). Lo sviluppo di kernel su sistemi senza MMU è cessato nel 2017, dopo aver spostato per tali chip lo sviluppo su RTOS come Zephyr. Si propone 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 il CPU ARMv7 PJ4 (MMP2, Berlin) è già cessato nel kernel, dopo di che non sono rimasti sistemi in uso che utilizzano questo set di istruzioni. Il supporto per iWMMXt è già cessato in Clang ed è proposto per la rimozione in GCC.
  • BE32 (big endian ARMv5) — utilizzato solo in un SoC Intel IXP4xx. Nelle versioni precedenti di Debian era supportato solo il modo little-endian, ma nei driver rimangono problemi irrisolti. Si propone di rimuovere il supporto per BE32 da GCC e dal kernel, poiché nei driver nessuno ha cercato di risolvere i problemi nel corso di diversi anni.
  • BE8 (big-endian ARMv7) — ci sono problemi in molti driver, il testing è cessato e non ci sono informazioni sui dispositivi ancora in uso. La modalità BE8 potrebbe essere di interesse per testare componenti dello spazio utente su sistemi big-endian, quindi il supporto per BE8 si prevede di mantenerlo nel kernel e GCC per almeno alcuni anni fino a quando non inizierà a causare problemi.

Funzionalità proposte per la rimozione dal kernel Linux:

  • La struttura param_struct, utilizzata prima di ATAGS (ARM Tag-Area) — dichiarata obsoleta già nel 2001, ma è ancora utilizzata nel codice per piattaforme RiscPC e Footbridge.
  • File di parametri basati sulla struttura ATAGS (utilizzati per trasmettere informazioni di configurazione fino al Device Tree) — nel kernel rimangono 29 file, collegati a 10 piattaforme SoC che utilizzano ATAGS.
  • OABI (Old ABI, vecchio ABI per l'architettura ARM) — ora viene utilizzato quasi ovunque EABI (Embedded ABI). OABI è la causa di molti errori, poiché gli sviluppatori di driver hanno smesso di considerare alcune caratteristiche ad esso collegate. Il supporto per OABI durante la compilazione di componenti per lo spazio utente è cessato in GCC 4.8, ma nel kernel è rimasto il flag "-mabi=apcs-gnu". Si propone di mantenere temporaneamente OABI, ma di complicare l'inclusione per dimenticanza.
  • La modalità di compatibilità OABI (OABI_COMPAT) consente l'esecuzione di file eseguibili compilati per OABI utilizzando un kernel EABI. Si verificano alcuni problemi con i driver a causa dell'incompatibilità con ioctl, ma la complessità della manutenzione di questa modalità è notevolmente inferiore rispetto alla manutenzione di kernel OABI. Per mantenere il supporto a StrongARM, è ragionevole conservare il supporto per OABI o OABI_COMPAT.
  • NWFPE (No Floating Point Emulator, emulatore per eseguire operazioni in virgola mobile) - le patch per la rimozione sono state proposte già 11 anni fa, ma NWFPE è richiesto per il funzionamento di alcuni componenti dell'area utente, compilati per OABI, quindi è consigliato mantenere il supporto per NWFPE fino a quando nel kernel rimarrà il supporto per OABI o OABI_COMPAT.
  • Highmem (utilizzato per gestire la memoria nelle 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. Si sta lavorando per organizzare l'accesso a 4 GB di RAM sui sistemi con LPAE (Cortex-A7/A15), dopo la quale il supporto per Highmem potrebbe essere rimosso.
  • Sparsemem è richiesto per sistemi che necessitano di highmem.

Piattaforme proposte per l'eliminazione:

  • RiscPC - la più antica delle piattaforme supportate nel kernel. Non è supportata in GCC, a partire dalla branch 9.x, a causa della rimozione del supporto ARMv3. Il mantenitore continua a testare il funzionamento del kernel su questa piattaforma, ma non sembrano esserci più utenti reali, quindi il supporto potrebbe essere interrotto in caso di perdita di interesse da parte del mantenitore.
  • SA1100, Footbridge - piattaforme obsolete, conservate solo per motivi di nostalgia. Quasi tutti i file con la 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 mantenitore.
  • Gemini, Moxart - utilizzano CPU basate su ARMv4. I chip sono stati prodotti oltre 20 anni fa, ma il loro supporto non richiede sforzi aggiuntivi per la manutenzione, quindi non ha senso rimuoverli fino alla rimozione della piattaforma StrongARM.
  • I file per il supporto PXA - la piattaforma è in uno stato abbandonato e non è più in uso, se non vi sarà un ritorno di interesse, si prevedono di rimuovere all'inizio del 2025.
  • OMAP1 - da un lato rimane l'unica piattaforma basata su ARMv4T/ARMv5 senza supporto per Device Tree e non si osservano movimenti verso la transizione a Device Tree, ma dall'altro lato la piattaforma ha ancora utenti.
  • Nspire, AT91RM9200, CLPS711X, EP93xx, iMX1 - utilizzano CPU basate su ARMv4T. Si sta lavorando alla migrazione delle descrizioni delle schede su Device Tree, ma il senso di mantenere il supporto rimane solo finché persiste il supporto per ARMv5.
  • OMAP24xx - l'unica piattaforma basata su ARMv6 con utenti attivi. Il mantenimento del supporto dipende dal mantenimento del supporto per CPU arm1136r0.
  • iMX31 - non ci sono informazioni sull'esistenza di utenti attivi, ma non ha senso rimuovere prima OMAP2.
  • S3C64xx (Cragganmore) - l'unica piattaforma senza supporto per Device Tree, costruita su base ARMv6K. La piattaforma continua ad essere utilizzata per testare codec audio, quindi la rimozione è stata rinviata fino a quando il test non sarà trasferito su un'altra scheda.
  • Orion5x, mv78xx0 - la questione della rimozione è prevista per essere discussa all'inizio dell'anno prossimo.
  • iMX35, WM8750, AST2500, BCM2835 - sono ben supportati e hanno utenti attivi, non si prevedono rimozioni al momento.
  • stm32f4/f7/h7 - microcontrollori senza MMU, la manutenzione nel kernel continua e ci sono utenti attivi. La questione della rimozione è prevista per essere 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