План прекращения поддержки старых процессоров ARM в ядре Linux
01.08.2024 08:44
Арнд Бергман (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 или 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 году.