Arnd Bergmann, odpovědný za balíčky s jádrem v SUSE, zveřejnil v mailing listu vývojářů jádra Linux plán odstranění podpory pro staré procesory ARM a související ABI, instrukční sady a funkce jádra, které jsou založeny na GCC. Plán je zatím ve stádiu RFC, tedy vystaven k diskusi komunitě. V případě schválení plánu se navrhuje zahájit odstranění starých procesorů ARM v jádru Linux 6.12, jehož vydání se očekává v prosinci. Prvními kandidáty na odstranění jsou ARMv4 (bez odstranění ARMv4T), iWMMXt, BE32 a OABI.
Ukončení podpory starých procesorů ARM v jádře souvisí s ukončením jejich podpory v GCC — část procesorů, které mají být odstraněny, již není podporována v novějších větvích GCC, a část má být odstraněna v budoucích verzích, což usnadní modernizaci a implementaci nových funkcí v kompilátoru. Odstranění podpory architektury v GCC si vyžádá odstranění její podpory i z jádra v případě zvýšení minimální podporované verze GCC (aktuálně je pro sestavení jádra vyžadována alespoň verze GCC 5.1).
Architektury, čipy a rozšíření, které se navrhují k odstranění z jádra:
- ARMv3 — podpora byla ukončena v GCC 9.
- ARMv4 — používá se pro stále běžné procesory StrongARM a FA526, přičemž nejnovější z těchto čipů byly vydány před přibližně 20 lety. Podpora ARMv4 byla ukončena v Debian 5.0. Navrhuje se nejprve ukončit podporu ARMv4 v GCC a za několik let i v jádře.
- ARMv4T — je běžně používáno v 6 rodinách SoC s jádry ARM720T, ARM920T a ARM922T, které jsou rozšířenější než SoC založené na ARMv4. Podpora ARMv4T byla ukončena v Debian 9.0. V jádře se plánuje ukončení podpory ARMv4T nejdříve po ukončení podpory ARMv5.
- ARMv5 — používá se na přibližně 1/3 všech platforem podporovaných v jádře, ale většina z těchto platforem se blíží konci životního cyklu. Debian nadále podporuje ARMv5, ale kvůli absenci FPU a atomických operací je stále obtížnější udržovat podporu a pravděpodobně bude brzy port Debian pro ARMv5 převeden na neoficiální.
- Počáteční generace ARMv6 — používají se v takových SoC, jako je ARM1136r0p (NXP i.MX31) a OMAP24xx (Nokia N8xx), ale jejich podpora vyžaduje hacky pro fungování v jádrech s SMP.
- ARMv6K — je používána v ARM1176 (Raspberry Pi 1, AST2500) a ARM1136r1. V jádře nejsou žádné překážky pro ukončení podpory, ale v distribucích vznikají problémy kvůli nekompatibilitě s typovým souborem armv7-a+vfpv3-d16.
- ARMv7-M — je používána v mikrořadičích založených na Cortex-M3/M4/M7, které zůstávají posledními podporovanými čipy v jádře bez bloku řízení paměti (MMU). Práce na jádrech v systémech bez MMU byla ukončena v roce 2017 poté, co se pro podobné čipy přešlo na vývoj RTOS, jako je Zephyr. Navrhuje se odstranit podporu ARMv7-M v roce 2027, deset let po ukončení vývoje, přestože podpora v GCC pokračuje.
- iWMMXt — v jádře byla již ukončena podpora CPU ARMv7 PJ4 (MMP2, Berlin), po kterém nezůstaly žádné běžně používané systémy, které by používaly tento soubor instrukcí. Podpora iWMMXt byla již ukončena v Clang a navržena k odstranění z GCC.
- BE32 (big endian ARMv5) — je používána pouze v jednom SoC Intel IXP4xx. Ve starších verzích Debianu byla podporována pouze režim little-endian, ale v ovladačích zůstávají nevyřešené problémy. Navrhuje se odstranit podporu BE32 z GCC a jádra, neboť se za posledních několik let nikdo nepokusil opravit problémy v ovladačích.
- BE8 (big-endian ARMv7) — v mnoha ovladačích existují problémy, testování je ukončeno a nejsou informace o zbývajících běžně používaných zařízeních. Režim BE8 může být zajímavý pro testování komponent uživatelského prostoru na systémech big-endian, proto se plánuje zachovat podporu BE8 v jádře a GCC po dobu minimálně několika let, dokud nezačne způsobovat problémy.
Navrhované možnosti k odstranění z jádra Linux:
- Struktura param_struct používaná před ATAGS (ARM Tag-Area) — byla prohlášena za zastaralou již v roce 2001, ale stále je používána v kódu pro platformy RiscPC a Footbridge.
- Soubory s parametry založené na struktuře ATAGS (používané k předávání informací o konfiguraci před Device Tree) — v jádře zůstává 29 souborů spojených s 10 platformami SoC, které používají ATAGS.
- OABI (Old ABI, starý ABI pro architekturu ARM) – téměř všude se nyní používá EABI (Embedded ABI). OABI je příčinou mnoha chyb, protože vývojáři ovladačů přestali brát v úvahu některé s ním spojené zvláštnosti. Podpora OABI při sestavování komponent pro uživatelský prostor byla ukončena v GCC 4.8, ale pro jádro byl ponechán příznak "-mabi=apcs-gnu". Doporučuje se prozatím ponechat OABI, ale zkomplikovat jeho zahrnutí z nedbalosti.
- Režim kompatibility s OABI (OABI_COMPAT) – umožňuje spouštění spustitelných souborů sestavených pro OABI na jádře s EABI. Vyskytují se samostatné problémy v ovladačích kvůli nekompatibilitě s ioctl, ale náročnost údržby tohoto režimu je výrazně menší než údržba jader s OABI. Pro zachování podpory StrongARM by bylo rozumné udržet podporu OABI nebo OABI_COMPAT.
- NWFPE (No Floating Point Emulator, emulátor pro provádění operací s plovoucí desetinou čárkou) – patche pro odstranění byly navrženy již před 11 lety, ale NWFPE je potřebný pro fungování některých komponentů uživatelského prostoru sestavených pro OABI, proto se doporučuje zachovat podporu NWFPE, dokud zůstává v jádře podpora OABI nebo OABI_COMPAT.
- Highmem (používá se pro správu paměti v oblastech nad 1 GB) – většina ARM systémů může fungovat bez zapnutí highmem nebo může používat CONFIG_VMSPLIT_2GB pro přístup k prvním 2 GB fyzické paměti. Pracuje se na zajištění přístupu k 4 GB RAM na systémech s LPAE (Cortex-A7/A15), po jejím dokončení může být podpora Highmem odstraněna.
- Sparsemem – je vyžadován pro systémy, které potřebují highmem.
Navrhované k odstranění platformy:
- RiscPC – nejstarší z podporovaných platforem v jádře. Nepodporuje se v GCC, počínaje větví 9.x z důvodu odstranění podpory ARMv3. Udržovatel nadále testuje funkčnost jádra na této platformě, ale skuteční uživatelé zřejmě již nejsou, proto může být podpora ukončena v případě ztráty zájmu ze strany udržovatele.
- SA1100, Footbridge – zastaralé platformy, udržované snad jen z nostalgie. Téměř všechny soubory s popisem desek pro tyto platformy byly odstraněny v jádře 6.3, zůstává pouze podpora zařízení ipaq h3600, assabet, netwinder a ebsa285. Otázka odstranění závisí na záměrech udržovatele.
- Gemini, Moxart — využívají CPU založené na ARMv4. Čipy byly vyrobeny před více než 20 lety, ale jejich podpora nevyžaduje dodatečné úsilí, a proto nemá smysl je odstraňovat, dokud nebude platforma StrongARM odstraněna.
- Soubory na podporu platformy PXA jsou opuštěné a vypadly z oběhu; pokud se o ně zájem neobnoví, plánují jejich odstranění na začátku roku 2025.
- OMAP1 — z jedné strany zůstává jedinou platformou založenou na ARMv4T/ARMv5 bez podpory Device Tree a není vidět žádný posun směrem k přechodu na Device Tree, ale na druhé straně zůstávají platformě uživatelé.
- Nspire, AT91RM9200, CLPS711X, EP93xx, iMX1 — využívají CPU na bázi ARMv4T. Pracuje se na převodu popisů desek na Device Tree, ale smysl jejich podpory zůstává jen do té doby, dokud se podrží ARMv5.
- OMAP24xx — jediná platforma založená na ARMv6 s aktivními uživateli. Udržení podpory závisí na zachování podpory CPU arm1136r0.
- iMX31 — nejsou žádné informace o existenci aktivních uživatelů, ale nemá smysl je odstranit dříve než OMAP2.
- S3C64xx (Cragganmore) — jediná platforma bez podpory Device Tree, postavená na bázi ARMv6K. Platforma se i nadále používá k testování zvukových kodeků, a proto bylo odstranění odloženo, dokud nebudou testy převedeny na jinou desku.
- Orion5x, mv78xx0 — otázka odstranění se plánuje projednat na začátku příštího roku.
- iMX35, WM8750, AST2500, BCM2835 — jsou dobře podporovány a mají aktivní uživatele, odstranění se zatím neplánuje.
- stm32f4/f7/h7 — mikrokontroléry bez MMU, podpora v jádru pokračuje a jsou zde aktivní uživatelé. Otázka odstranění se plánuje projednat v roce 2026.
Zdroj: opennet.ru
