Арнд Бергман (Arnd Bergmann), отговарящ за пакетите с ядрото в SUSE, публикува в списъка за разработчиците на ядрото на Linux план за избавяне на ядрото и компилаторските инструменти на базата на GCC от кода за поддръжка на стари ARM CPU и свързаните с тях ABI, набори от команди и възможности на ядрото. Планът все още е в стадий на RFC, т.е. изложен за обсъждане от общността. В случай на одобрение на плана, премахването на старите ARM процесори се предлага да започне в ядрото на Linux 6.12, чийто релиз се очаква през декември. Първите кандидати за премахване са ARMv4 (без премахване на ARMv4T), iWMMXt, BE32 и OABI.
Прекратяването на поддръжката на старите ARM CPU в ядрото съвпада с прекратяването на тяхната поддръжка в GCC — част от представените за премахване CPU вече не се поддържат в новите версии на GCC, а част от тях планират да бъдат премахнати в бъдещите издания, което ще улесни модернизацията и реализирането на нови възможности в компилатора. Премахването на поддръжката на архитектурата в GCC ще изисква премахване на нейната поддръжка и от ядрото в случай на повишаване на минимално поддържаната от ядрото версия на GCC (в момента за компилиране на ядрото изисква минимум версия GCC 5.1).
Архитектури, чипове и разширения, които се предлагат за премахване от ядрото:
- ARMv3 — поддръжката вече е прекратена в GCC 9.
- ARMv4 — използва се за все още разпространени процесори StrongARM и FA526, като най-новите от тези чипове са излезли преди около 20 години. Поддръжката на ARMv4 е прекратена в Debian 5.0. Предлага се първо да се прекрати поддръжката на ARMv4 в GCC, а след няколко години и в ядрото.
- ARMv4T — в употреба се срещат 6 семейства SoC с ядра ARM720T, ARM920T и ARM922T, които са по-разпространени от SoC на базата на ARMv4. Поддръжката на ARMv4T е прекратена в Debian 9.0. В ядрото планират да прекратят поддръжката на ARMv4T не по-рано от прекратяването на поддръжката на ARMv5.
- ARMv5 — използва се на около 1/3 от всички поддържани в ядрото платформи, но повечето от тези платформи са близки до края на жизнения си цикъл. Debian продължава да поддържа ARMv5, но поради липса на FPU и атомарни операции поддържането става все по-трудно и вероятно скоро портът на Debian за ARMv5 ще бъде прехвърлен в категорията на неофициалните.
- Началните поколения ARMv6 — използват се в такива SoC като ARM1136r0p (NXP i.MX31) и OMAP24xx (Nokia N8xx), но тяхната поддръжка изисква хакове за работа в ядра с SMP.
- ARMv6K — използва се в ARM1176 (Raspberry Pi 1, AST2500) и ARM1136r1. В ядрото няма пречки за прекратяване на поддръжката, но в дистрибутивите възникват затруднения поради несъответствие с типовия набор armv7-a+vfpv3-d16.
- ARMv7-M — използва се в микроконтролерите, базирани на Cortex-M3/M4/M7, които остават последните поддържани в ядрото чипове без блок за управление на паметта (MMU). Работата по ядрата на системи без MMU беше прекратена през 2017 година, след като за подобни чипове се премина на развитие на RTOS, като Zephyr. Предлага се премахването на поддръжката на ARMv7-M през 2027 година, след 10 години, след прекратяване на разработката, въпреки продължаващата поддръжка в GCC.
- iWMMXt — в ядрото вече е прекратена поддръжката на CPU ARMv7 PJ4 (MMP2, Berlin), след което не остана системи в употреба, които използват този набор инструкции. Поддръжката на iWMMXt вече е прекратена в Clang и е предложена за премахване от GCC.
- BE32 (big endian ARMv5) — използва се единствено в едно SoC Intel IXP4xx. В стари версии на Debian се поддържаше само режим little-endian, но в драйверите остават неразрешени проблеми. Предлага се премахването на поддръжката на BE32 от GCC и ядрото, тъй като в драйверите в продължение на няколко години никой не е опитал да поправи проблемите.
- BE8 (big-endian ARMv7) — в много драйвери има проблеми, прекратено е тестването на работата и няма информация за оставащите в употреба устройства. Режимът BE8 може да представлява интерес за тестване на компоненти в потребителското пространство на системи с big-endian, затова поддръжката на BE8 планират да бъде запазена в ядрото и GCC поне още няколко години, докато не започне да води до проблеми.
Предложени за премахване възможности на ядрото Linux:
- Структурата param_struct, използвана до ATAGS (ARM Tag-Area) — обявена за остаряла още през 2001 година, но все още се използва в кода за платформите RiscPC и Footbridge.
- Файлове с параметри на базата на структурата ATAGS (използвана за предаване на информация за конфигурация до Device Tree) — в ядрото остават 29 файла, свързани с 10 платформи SoC, използващи ATAGS.
- OABI (Старый ABI для архитектуры ARM) — почти везде сейчас используется EABI (Embedded ABI). OABI является причиной множества ошибок, так как разработчики драйверов перестали учитывать некоторые связанные с ним особенности. Поддержка OABI при сборке компонентов для пользовательского пространства прекратилась в GCC 4.8, но для ядра оставлен флаг «-mabi=apcs-gnu». Рекомендуется оставить OABI, но усложнить его включение по недосмотру.
- Режим совместимости с OABI (OABI_COMPAT) — позволяет выполнять исполняемые файлы, собранные для OABI, используя ядро с EABI. Возникают отдельные проблемы в драйверах из-за несовместимости с ioctl, но трудозатраты на сопровождение данного режима заметно меньше, чем сопровождение ядер с OABI. Для сохранения поддержки StrongARM целесообразно сохранить поддержку OABI или OABI_COMPAT.
- NWFPE (Эмулятор для выполнения операций с плавающей запятой) — патчи для удаления были предложены еще 11 лет назад, но NWFPE необходим для работы некоторых компонентов пользовательского пространства, собранных для OABI, поэтому поддержку NWFPE рекомендуется сохранять до тех пор, пока в ядре остаётся поддержка OABI или OABI_COMPAT.
- Highmem (используется для управления памятью в областях после 1 ГБ) — большинство ARM-систем могут работать без включения highmem или могут использовать CONFIG_VMSPLIT_2GB для доступа к первым 2 ГБ физической памяти. Ведётся работа по организации доступа к 4 ГБ ОЗУ на системах с LPAE (Cortex-A7/A15), после завершения которой поддержка Highmem может быть удалена.
- Sparsemem — требуется для систем, для которых необходим highmem.
Предложенные для удаления платформы:
- RiscPC — старейшая из поддерживаемых в ядре платформ. Не поддерживается в GCC начиная с ветки 9.x из-за удаления поддержки ARMv3. Сопровождающий продолжает тестировать работу ядра на данной платформе, но реальных пользователей, судя по всему, уже нет, поэтому поддержка может быть прекращена в случае потери интереса сопровождающего.
- SA1100, Footbridge — устаревшие платформы, сохраняемые разве что из соображений ностальгии. Почти все файлы с описанием плат для данных платформ были удалены в ядре 6.3, остаётся только поддержка устройств ipaq h3600, assabet, netwinder и ebsa285. Вопрос об удалении зависит от намерений сопровождающего.
- Gemini, Moxart — използват CPU на базата ARMv4. Чиповете са произведени преди повече от 20 години, но поддръжката им не изисква допълнителни усилия, затова няма смисъл да бъдат премахвани преди изтриването на платформата StrongARM.
- Файловете за поддръжка на PXA — платформата, са в забрава и излезли от употреба, ако интересът към тях не се възроди, ще бъдат премахнати в началото на 2025 година.
- OMAP1 — от една страна остава единствената платформа на базата ARMv4T/ARMv5 без поддръжка на Device Tree и не се наблюдават никакви действия по прехода към Device Tree, но от друга страна платформата има все още потребители.
- Nspire, AT91RM9200, CLPS711X, EP93xx, iMX1 — използват CPU на базата ARMv4T. Работи се по прехвърлянето на описанията на платите на Device Tree, но смисълът да се поддържат остава само докато има поддръжка на ARMv5.
- OMAP24xx — единствената платформа на базата ARMv6 с активни потребители. Поддържането зависи от запазването на поддръжката на CPU arm1136r0.
- iMX31 — няма информация за наличието на активни потребители, но няма смисъл да се премахва по-рано от OMAP2.
- S3C64xx (Cragganmore) — единствената платформа без поддръжка на Device Tree, построена на базата ARMv6K. Платформата продължава да се използва за тестване на звукови кодеци, затова премахването е отложено, докато тестването не бъде прехвърлено на друга платка.
- Orion5x, mv78xx0 — въпросът за премахването планират да обсъдят в началото на следващата година.
- iMX35, WM8750, AST2500, BCM2835 — са добре поддържани и имат активни потребители, за премахване не се планира.
- stm32f4/f7/h7 — микроконтролери без MMU, поддръжката в ядрото продължава и имат активни потребители. Въпросът за премахването планират да обсъдят през 2026 година.
Източник: opennet.ru
