Eu diria que você está sonhando. O principal problema será a RAM limitada.
Em 2004, Eric Beiderman conseguiu inicializar um kernel com 2,5 MB de RAM , com muitas funcionalidades removidas.
No entanto, isso foi no x86, e você está falando sobre o ARM. Então, tentei criar o menor kernel ARM possível, para a plataforma 'versátil' (uma das mais simples). Desliguei todas as opções configuráveis, incluindo as que você está procurando (USB, WiFi, SPI, I2C), para ver o quão pequeno seria. Agora, estou apenas me referindo ao kernel aqui, e isso não inclui nenhum componente do espaço do usuário.
A boa notícia: caberá no seu flash. O zImage resultante é de 383204 bytes.
A má notícia: com 256kB de RAM, não será possível inicializar:
$ size obj/vmlinux
text data bss dec hex filename
734580 51360 14944 800884 c3874 obj/vmlinux
O segmento .text é maior que a RAM disponível, portanto o kernel não pode descompactar, muito menos alocar memória para inicializar, muito menos executar qualquer coisa útil.
Uma solução alternativa seria usar o suporte à execução no local (CONFIG_XIP), se o sistema suportar isso (por exemplo, ele pode buscar instruções diretamente do Flash). No entanto, isso significa que seu kernel precisa caber descomprimido no flash e 734kB> 700kB. Além disso, as seções .data e .bss totalizam 66kB, deixando cerca de 190kB para todo o resto (ou seja, todas as estruturas de dados alocadas dinamicamente no kernel).
Esse é apenas o núcleo. Sem os drivers que você precisa, ou qualquer espaço no usuário.
Então, sim, você precisará de um pouco mais de RAM.
OMI, você está sonhando. Especialmente com USB, rede e 802.11 / wifi. Eu simplesmente não acho que você pode fazer isso e o M3 é realmente um trecho.
O OpenWRT é uma das menores e mais incorporáveis distribuições Linux que conheço para redes e é difícil conseguir isso com menos de 2 MB, especialmente com Wifi.
Tente procurar chips ARM de última geração, se é isso que você realmente deseja ou use os SoC da Broadcom ou Atheros, que atualmente são comuns em roteadores.
fonte
Você tem MMU no processador? Caso contrário, você pode querer olhar para: http://www.uclinux.org/ que deve fornecer um tamanho de kernel muito menor do que o mencionado. Funciona para alguns chips CortexM3 Atmel, portanto, pode funcionar para o seu. Eu não o usei, então isso é apenas especulativo. Doh, acabei de ver que a pergunta foi atualizada - bem, se você não possui um MMU (o que provavelmente não possui), não pode usar o kernel "normal" e precisaria usar o ucLinux.
fonte
Você pode considerar o NuttX como uma alternativa se realmente deseja a conformidade com POSIX em uma plataforma pequena e não MMU.
fonte
Não me lembro das especificidades, mas há uma empresa que fabrica placas com STM32F4s executando o uCLinux, o software pode ser baixado, mas elas têm RAM e flash externos nessas placas.
Como observação, o preço é tão alto que é melhor você adquirir um Pi ou Pine64, a menos que queira isso como uma experiência de aprendizado. Nossa empresa analisou a questão e, considerando o custo de desenvolvimento, decidiu que, se rodássemos algo no Linux embarcado usando stm32f4, seria inviável economicamente, contando apenas o custo das peças.
fonte
O uCLinux provavelmente funcionará. No entanto, você não terá proteção de memória no sistema, pois não possui MMU. Isso significa que qualquer falha em qualquer aplicativo pode derrubar todo o sistema. Você também pode encontrar problemas de fragmentação de memória sem a MMU. Por que não olhar para uma das TI Sitaras? Eles ainda são muito baratos e você pode rodar o Linux completo, o que será muito mais flexível.
fonte