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.