Arnd Bergmann, responsável pelos pacotes do kernel na SUSE, publicou na lista de discussão dos desenvolvedores do kernel Linux um plano para remover do kernel e do conjunto de ferramentas de compilação baseado no GCC o código que suporta CPUs ARM antigas e seus respectivos ABI, conjuntos de instruções e capacidades do kernel. O plano ainda está na fase de RFC, ou seja, aberto para discussão na comunidade. Caso o plano seja aprovado, a remoção de antigos processadores ARM está prevista para começar no kernel Linux 6.12, cuja versão está prevista para dezembro. Os primeiros candidatos à remoção incluem ARMv4 (sem remover ARMv4T), iWMMXt, BE32 e OABI.
A descontinuação do suporte a CPUs ARM antigas no kernel coincide com a interrupção do seu suporte no GCC — parte das CPUs apresentadas para remoção já não são suportadas nas versões mais recentes do GCC, enquanto outras estão previstas para serem removidas em versões futuras, o que simplificará a modernização e a implementação de novas funcionalidades no compilador. A remoção do suporte à arquitetura no GCC exigirá a remoção do seu suporte no kernel caso a versão mínima suportada pelo kernel do GCC seja elevada (atualmente, para compilar o kernel é necessário pelo menos a versão GCC 5.1).
Arquiteturas, chips e extensões que são propostas para remoção do kernel:
- ARMv3 — o suporte já foi descontinuado no GCC 9.
- ARMv4 — utilizado em processadores StrongARM e FA526 que ainda estão em uso, sendo que os mais novos desses chips foram lançados há cerca de 20 anos. O suporte ao ARMv4 foi descontinuado no Debian 5.0. A proposta é descontinuar primeiramente o suporte ao ARMv4 no GCC e, após alguns anos, também no kernel.
- ARMv4T — existem 6 famílias de SoCs com núcleos ARM720T, ARM920T e ARM922T em uso, que são mais comuns do que SoCs baseados em ARMv4. O suporte ao ARMv4T foi descontinuado no Debian 9.0. No kernel, o suporte ao ARMv4T está previsto para ser descontinuado, não antes da descontinuação do suporte ao ARMv5.
- ARMv5 — utilizado em cerca de 1/3 de todas as plataformas suportadas no kernel, mas a maioria destas plataformas está próxima do fim do ciclo de vida. O Debian continua a suportar o ARMv5, mas devido à falta de FPU e operações atômicas, manter o suporte está se tornando cada vez mais difícil e, provavelmente, em breve o port do Debian para ARMv5 será classificado como não oficial.
- As gerações iniciais do ARMv6 — utilizadas em SoCs como ARM1136r0p (NXP i.MX31) e OMAP24xx (Nokia N8xx), mas seu suporte requer hacks para funcionar em kernels com SMP.
- ARMv6K — utilizado no ARM1176 (Raspberry Pi 1, AST2500) e ARM1136r1. Não há obstáculos para a descontinuação do suporte no núcleo, mas surgem dificuldades em distribuições devido à incompatibilidade com o conjunto padrão armv7-a+vfpv3-d16.
- ARMv7-M — usado em microcontroladores baseados em Cortex-M3/M4/M7, que permanecem os últimos chips suportados no núcleo sem um bloco de controle de memória (MMU). O trabalho em núcleos para sistemas sem MMU foi interrompido em 2017, após a mudança para o desenvolvimento de RTOS, como Zephyr. Está proposta a remoção do suporte ao ARMv7-M em 2027, dez anos após a interrupção do desenvolvimento, apesar da continuidade do suporte no GCC.
- iWMMXt — o suporte ao CPU ARMv7 PJ4 (MMP2, Berlin) já foi descontinuado no núcleo, após o que não sobraram sistemas em uso que utilizem este conjunto de instruções. O suporte ao iWMMXt já foi descontinuado no Clang e foi proposto para remoção do GCC.
- BE32 (big endian ARMv5) — utilizado apenas em um SoC Intel IXP4xx. Versões antigas do Debian suportavam apenas o modo little-endian, mas permanecem problemas não resolvidos nos drivers. Está proposta a remoção do suporte ao BE32 do GCC e do núcleo, já que nos drivers ninguém tentou corrigir os problemas ao longo de vários anos.
- BE8 (big-endian ARMv7) — muitos drivers apresentam problemas, os testes foram interrompidos e não há informações sobre dispositivos ainda em uso. O modo BE8 pode ser interessante para testar componentes do espaço do usuário em sistemas big-endian, portanto, o suporte ao BE8 está planejado para ser mantido no núcleo e no GCC por pelo menos mais alguns anos até começar a causar problemas.
Possibilidades propostas para remoção do núcleo Linux:
- A estrutura param_struct, utilizada antes do ATAGS (Área de Tag ARM) — foi declarada obsoleta em 2001, mas ainda é utilizada no código para plataformas RiscPC e Footbridge.
- Arquivos de parâmetros baseados na estrutura ATAGS (utilizada para transmitir informações de configuração antes da Device Tree) — permanecem no núcleo 29 arquivos relacionados a 10 plataformas SoC que utilizam ATAGS.
- OABI (Old ABI, antigo ABI para arquitetura ARM) agora é quase sempre substituído pelo EABI (Embedded ABI). OABI é a causa de muitos erros, pois os desenvolvedores de drivers deixaram de considerar certas particularidades associadas. O suporte ao OABI na construção de componentes para espaço de usuário foi descontinuado no GCC 4.8, mas a opção '−mabi=apcs-gnu' permanece para o kernel. Recomenda-se manter o OABI temporariamente, mas dificultar sua inclusão por descuido.
- O modo de compatibilidade com OABI (OABI_COMPAT) permite a execução de arquivos executáveis construídos para OABI, utilizando um kernel com EABI. Surgem problemas específicos em drivers devido à incompatibilidade com ioctl, mas o esforço de manutenção desse modo é consideravelmente menor do que o de manutenção de kernels com OABI. Para preservar o suporte ao StrongARM, será mais viável manter o suporte ao OABI ou OABI_COMPAT.
- NWFPE (No Floating Point Emulator, emulador para operações de ponto flutuante) — patches para remoção foram sugeridos há 11 anos, mas o NWFPE é necessário para o funcionamento de alguns componentes do espaço do usuário, construídos para OABI, portanto, a recomendação é manter o suporte ao NWFPE enquanto o kernel ainda oferecer suporte ao OABI ou OABI_COMPAT.
- Highmem (utilizado para gerenciamento de memória em áreas acima de 1 GB) — a maioria dos sistemas ARM pode operar sem ativar o highmem ou pode usar CONFIG_VMSPLIT_2GB para acessar os primeiros 2 GB de memória física. Há trabalho em andamento para possibilitar o acesso a 4 GB de RAM em sistemas com LPAE (Cortex-A7/A15), após o que o suporte ao Highmem pode ser removido.
- Sparsemem — necessário para sistemas que necessitam de highmem.
Plataformas propostas para remoção:
- RiscPC — a mais antiga das plataformas suportadas no kernel. Não é mais suportada no GCC desde a versão 9.x devido à remoção do suporte para ARMv3. O mantenedor continua testando o funcionamento do kernel nessa plataforma, mas, aparentemente, já não há usuários reais, portanto, o suporte pode ser descontinuado caso o interesse do mantenedor diminua.
- SA1100, Footbridge — plataformas obsoletas, mantidas apenas por questões de nostalgia. Quase todos os arquivos de descrição de placas para essas plataformas foram removidos no kernel 6.3, restando apenas suporte para dispositivos ipaq h3600, assabet, netwinder e ebsa285. A decisão sobre a remoção depende das intenções do mantenedor.
- Gemini, Moxart — utilizam CPU baseados em ARMv4. Os chips foram lançados há mais de 20 anos, mas seu suporte não requer esforços adicionais de manutenção, portanto, não há sentido em removê-los antes da descontinuação da plataforma StrongARM.
- Os arquivos para suporte à plataforma PXA estão em estado abandonado e não estão mais em uso; a menos que o interesse neles renasça, pretende-se removê-los no início de 2025.
- OMAP1 — por um lado, continua sendo a única plataforma baseada em ARMv4T/ARMv5 sem suporte à Device Tree e não há movimentações observáveis para a transição para a Device Tree, mas, por outro lado, a plataforma ainda possui usuários.
- Nspire, AT91RM9200, CLPS711X, EP93xx, iMX1 — usam CPU baseados em ARMv4T. Está em andamento o trabalho de transição das descrições das placas para a Device Tree, mas o sentido de mantê-las permanece apenas enquanto houver suporte ao ARMv5.
- OMAP24xx — a única plataforma baseada em ARMv6 que possui usuários ativos. A manutenção do suporte depende da preservação do suporte ao CPU arm1136r0.
- iMX31 — não há informações sobre a presença de usuários ativos, mas não faz sentido removê-la antes do OMAP2.
- S3C64xx (Cragganmore) — a única plataforma sem suporte à Device Tree, construída sobre ARMv6K. A plataforma continua a ser usada para testar codecs de áudio, portanto a remoção foi adiada até que os testes sejam transferidos para outra placa.
- Orion5x, mv78xx0 — a questão da remoção será considerada no início do próximo ano.
- iMX35, WM8750, AST2500, BCM2835 — são bem suportados e têm usuários ativos, não está planejada a remoção por enquanto.
- stm32f4/f7/h7 — microcontroladores sem MMU, a manutenção no núcleo continua e há usuários ativos. A questão da remoção será considerada em 2026.
Fonte: opennet.ru
