Арнд Бергман (Arnd Bergmann), отвечающий за пакеты с ядром в SUSE, опубликовал в списке рассылки разработчиков ядра Linux план избавления ядра и сборочного инструментария на базе GCC от кода для поддержи старых CPU ARM и связанных с ними ABI, специфичных наборов инструкций и возможностей ядра. План пока находится на стадии RFC, т.е. выставлен для обсуждение сообществом. В случае утверждения плана, удаление старых процессоров ARM предлагается начать в ядре Linux 6.12, релиз которого ожидается в декабре. Первыми кандидатами на удаление названы ARMv4 (без удаления ARMv4T), iWMMXt, BE32 и OABI.
Прекращение поддержки старых CPU ARM в ядре пересекается с прекращением их поддержки в 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 платформами SoС, использующие ATAGS.
- OABI (Old ABI, старый ABI для архитектуры ARM) – почти везде теперь используется EABI (Embedded ABI). OABI является причиной многих ошибок, так как разработчики драйверов перестали учитывать некоторые связанные с ним особенности. Поддержка OABI при сборке компонентов для пространства пользователей прекращена в GCC 4.8, но для ядра оставлен флаг “-mabi=apcs-gnu”. Предлагается пока оставить OABI, но усложнить включение по недосмотру.
- Режим совместимости с OABI (OABI_COMPAT) – позволяет выполнять исполняемые файлы, собранные для OABI, используя ядро с EABI. Возникают отдельные проблемы в драйверах из-за несовместимости с ioctl, но трудоёмкость сопровождения данного режима заметно меньше, чем сопровождение ядер с OABI. Для сохранения поддержки StrongARM вероятно будет рациональным сохранить поддержку OABI_COMPAT.
- NWFPE (No Floating Point Emulator, эмулятор для выполнения операций с плавающей запятой) – патчи для удаления были предложены ещё 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 году.