Arnd Bergmann, odpowiedzialny za pakiety jądra w SUSE, opublikował na liście mailingowej dla deweloperów jądra Linux plan usunięcia wsparcia dla starych procesorów ARM oraz związanych z nimi ABI, zestawów instrukcji i możliwości jądra z kodu jądra oraz narzędzi budowlanych opartych na GCC. Plan jest obecnie na etapie RFC, tj. jest wystawiony do dyskusji w społeczności. W przypadku zatwierdzenia planu, usunięcie wsparcia dla starych procesorów ARM planuje się rozpocząć w jądrze Linux 6.12, którego wydanie oczekiwane jest w grudniu. Pierwszymi kandydatami do usunięcia są ARMv4 (bez usuwania ARMv4T), iWMMXt, BE32 oraz OABI.
Zakończenie wsparcia dla starych CPU ARM w jądrze pokrywa się z zakończeniem ich wsparcia w GCC — część CPU przewidzianych do usunięcia nie jest już wspierana w najnowszych gałęziach GCC, a część planuje się usunąć w przyszłych wersjach, co ułatwi modernizację i implementację nowych możliwości w kompilatorze. Usunięcie wsparcia architektury z GCC wymaga usunięcia wsparcia także z jądra w przypadku podniesienia minimalnej wspieranej wersji GCC (obecnie do kompilacji jądra wymagana jest co najmniej wersja GCC 5.1).
Architektury, chipy i rozszerzenia proponowane do usunięcia z jądra:
- ARMv3 — wsparcie zostało już zakończone w GCC 9.
- ARMv4 — używany przez nadal popularne procesory StrongARM i FA526, przy czym najnowsze z tych chipów zostały wydane około 20 lat temu. Wsparcie dla ARMv4 zakończono w Debian 5.0. Proponuje się najpierw zakończyć wsparcie dla ARMv4 w GCC, a po kilku latach także w jądrze.
- ARMv4T — w użyciu jest 6 rodzin SoC z rdzeniami ARM720T, ARM920T i ARM922T, które są bardziej rozpowszechnione niż SoC oparte na ARMv4. Wsparcie dla ARMv4T zakończono w Debian 9.0. W jądrze planuje się zakończyć wsparcie dla ARMv4T, nie wcześniej niż zakończenie wsparcia dla ARMv5.
- ARMv5 — używany jest w około 1/3 wszystkich wspieranych platform w jądrze, ale większość tych platform zbliża się do końca cyklu życia. Debian nadal wspiera ARMv5, ale z powodu braku FPU i atomowych operacji utrzymanie wsparcia staje się coraz trudniejsze i prawdopodobnie wkrótce port Debiana dla ARMv5 zostanie przeklasyfikowany na nieoficjalny.
- Wczesne generacje ARMv6 — używane w takich SoC jak ARM1136r0p (NXP i.MX31) i OMAP24xx (Nokia N8xx), ale ich wsparcie wymaga obejść dla działających w jądrze SMP.
- ARMv6K — stosowany w ARM1176 (Raspberry Pi 1, AST2500) oraz ARM1136r1. W jądrze nie ma przeszkód do zaprzestania wsparcia, jednak w dystrybucjach pojawiają się trudności z powodu niezgodności z zestawem armv7-a+vfpv3-d16.
- ARMv7-M — używany w mikrokontrolerach opartych na Cortex-M3/M4/M7, które pozostają ostatnimi wspieranymi w jądrze układami bez jednostki zarządzania pamięcią (MMU). Prace nad rdzeniami w systemach bez MMU zakończono w 2017 roku, po przełączaniu się na rozwój RTOS, takich jak Zephyr. Proponuje się usunięcie wsparcia dla ARMv7-M w 2027 roku, po 10 latach od zaprzestania rozwoju, mimo kontynuacji wsparcia w GCC.
- iWMMXt — wsparcie dla CPU ARMv7 PJ4 (MMP2, Berlin) zostało już zakończone w jądrze, po czym nie pozostały w użyciu systemy wykorzystujące ten zestaw instrukcji. Wsparcie dla iWMMXt zostało już zakończone w Clang i zaproponowano jego usunięcie z GCC.
- BE32 (big endian ARMv5) — używany tylko w jednym SoC Intel IXP4xx. W starszych wersjach Debiana wspierany był tylko tryb little-endian, jednak w sterownikach pozostają nierozwiązane problemy. Proponuje się usunięcie wsparcia BE32 z GCC i jądra, ponieważ przez kilka lat nikt nie próbował naprawić problemów w sterownikach.
- BE8 (big-endian ARMv7) — w wielu sterownikach występują problemy, zakończono testowanie działania i brak jest informacji o pozostałych w użyciu urządzeniach. Tryb BE8 może być interesujący dla testowania komponentów przestrzeni użytkownika na systemach big-endian, dlatego wsparcie dla BE8 planowane jest w jądrze i GCC przez co najmniej kilka lat, dopóki nie zacznie powodować problemów.
Proponowane do usunięcia możliwości jądra Linux:
- Struktura param_struct, używana do ATAGS (ARM Tag-Area) — ogłoszona przestarzałą już w 2001 roku, ale nadal używana w kodzie dla platform RiscPC i Footbridge.
- Pliki z parametrami na bazie struktury ATAGS (używane do przesyłania informacji konfiguracyjnych przed Device Tree) — w jądrze pozostaje 29 plików związanych z 10 platformami SoC korzystającymi z ATAGS.
- OABI (Old ABI, stary ABI dla architektury ARM) – obecnie prawie wszędzie stosuje się EABI (Embedded ABI). OABI jest przyczyną wielu błędów, ponieważ twórcy sterowników przestali uwzględniać niektóre związane z nim szczegóły. Wsparcie dla OABI podczas kompilacji komponentów dla przestrzeni użytkowników zostało zakończone w GCC 4.8, ale dla jądra pozostawiono flagę „-mabi=apcs-gnu”. Zaleca się na razie pozostawienie OABI, ale utrudnienie włączenia z powodu niedopatrzenia.
- Tryb zgodności z OABI (OABI_COMPAT) – umożliwia uruchamianie plików wykonywalnych skompilowanych dla OABI, używając jądra z EABI. Pojawiają się oddzielne problemy w sterownikach z powodu niezgodności z ioctl, ale trudności związane z utrzymaniem tego trybu są znacznie mniejsze niż utrzymanie jąder z OABI. Aby zachować wsparcie dla StrongARM, rozsądne będzie utrzymanie wsparcia dla OABI lub OABI_COMPAT.
- NWFPE (No Floating Point Emulator, emulator do wykonywania operacji z przecinkiem zmiennoprzecinkowym) – patche do usunięcia były proponowane już 11 lat temu, ale NWFPE jest wymagane do działania niektórych komponentów przestrzeni użytkownika, skompilowanych dla OABI, dlatego zaleca się utrzymanie wsparcia dla NWFPE tak długo, jak w jądrze pozostaje wsparcie dla OABI lub OABI_COMPAT.
- Highmem (używane do zarządzania pamięcią w obszarach powyżej 1 GB) – większość systemów ARM może działać bez włączania highmem lub może używać CONFIG_VMSPLIT_2GB do uzyskania dostępu do pierwszych 2 GB pamięci fizycznej. Trwają prace nad organizacją dostępu do 4 GB RAM w systemach z LPAE (Cortex-A7/A15), po zakończeniu których wsparcie dla Highmem może zostać usunięte.
- Sparsemem – wymagane dla systemów, które potrzebują highmem.
Proponowane do usunięcia platformy:
- RiscPC – najstarsza z obsługiwanych platform w jądrze. Nie jest wspierana w GCC, począwszy od gałęzi 9.x z powodu usunięcia wsparcia dla ARMv3. Osoba odpowiedzialna nadal testuje działanie jądra na tej platformie, ale rzeczywistych użytkowników, zdaje się, już nie ma, dlatego wsparcie może zostać zakończone w przypadku utraty zainteresowania ze strony osoby odpowiedzialnej.
- SA1100, Footbridge – przestarzałe platformy, które są zachowywane raczej z powodów nostalgicznych. Prawie wszystkie pliki z opisem płyt dla tych platform zostały usunięte w jądrze 6.3, pozostaje tylko wsparcie dla urządzeń ipaq h3600, assabet, netwinder i ebsa285. Kwestia usunięcia zależy od zamiarów osoby odpowiedzialnej.
- Gemini, Moxart — wykorzystują CPU oparte na ARMv4. Chipy te zostały wydane ponad 20 lat temu, ale ich wsparcie nie wymaga dodatkowych wysiłków w konserwacji, dlatego nie ma sensu ich usuwanie do momentu zlikwidowania platformy StrongARM.
- Pliki do wsparcia platformy PXA są w stanie porzuconym i wyszły z użycia; jeśli nie wróci zainteresowanie, planuje się ich usunięcie na początku 2025 roku.
- OMAP1 — z jednej strony pozostaje jedyną platformą opartą na ARMv4T/ARMv5 bez wsparcia Device Tree i nie ma żadnych ruchów w kierunku migracji na Device Tree, ale z drugiej strony platforma ma wciąż użytkowników.
- Nspire, AT91RM9200, CLPS711X, EP93xx, iMX1 — wykorzystują CPU oparte na ARMv4T. Trwa praca nad przeniesieniem opisów płyt na Device Tree, ale sens ich wsparcia pozostaje tylko do momentu, gdy nadal będzie zapewnione wsparcie ARMv5.
- OMAP24xx — jedyna platforma oparta na ARMv6, która ma aktywnych użytkowników. Utrzymanie wsparcia zależy od kontynuacji wsparcia CPU arm1136r0.
- iMX31 — brak informacji o aktywnych użytkownikach, ale nie ma sensu usuwać jej wcześniej niż OMAP2.
- S3C64xx (Cragganmore) — jedyna platforma bez wsparcia Device Tree, która jest oparta na ARMv6K. Platforma ta jest wciąż używana do testowania kodeków audio, dlatego usunięcie zostaje odłożone aż do momentu przeniesienia testów na inną płytę.
- Orion5x, mv78xx0 — rozważany jest temat usunięcia na początku przyszłego roku.
- iMX35, WM8750, AST2500, BCM2835 — są dobrze wspierane i mają aktywnych użytkowników, usunięcie niestety na razie nie jest planowane.
- stm32f4/f7/h7 — mikrokontrolery bez MMU, wsparcie w jądrze jest kontynuowane i mają aktywnych użytkowników. Rozważany jest temat usunięcia w 2026 roku.
Źródło: opennet.ru
