План прекращения поддержки старых процессоров ARM в ядре Linux

Арнд Бергман (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 — используется на около ⅓ из всех поддерживаемых в ядре платформ, но большинство из данных платформ близки к окончанию жизненного цикла. 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 году.



Источник: http://www.opennet.ru/opennews/art.shtml? num=61641

©  OpenNet