Yo diría que estás soñando. El principal problema será la RAM limitada.
En 2004, Eric Beiderman logró arrancar un kernel con 2.5 MB de RAM , con mucha funcionalidad eliminada.
Sin embargo, eso fue en x86, y estás hablando de ARM. Así que intenté construir el núcleo ARM más pequeño posible, para la plataforma 'versátil' (una de las más simples). Desactivé todas las opciones configurables, incluidas las que está buscando (USB, WiFi, SPI, I2C), para ver qué tan pequeño se volvería. Ahora, solo me estoy refiriendo al kernel aquí, y esto no incluye ningún componente de espacio de usuario.
La buena noticia: cabe en tu flash. La zImage resultante es 383204 bytes.
La mala noticia: con 256kB de RAM, no podrá arrancar:
$ size obj/vmlinux
text data bss dec hex filename
734580 51360 14944 800884 c3874 obj/vmlinux
El segmento .text es más grande que su RAM disponible, por lo que el núcleo no puede descomprimirse, y mucho menos asignar memoria para arrancar, y mucho menos ejecutar cualquier cosa útil.
Una solución alternativa sería utilizar el soporte de ejecución en el lugar (CONFIG_XIP), si su sistema lo admite (es decir, puede obtener instrucciones directamente desde Flash). Sin embargo, eso significa que su núcleo debe caber sin comprimir en flash y 734kB> 700kB. Además, las secciones .data y .bss suman un total de 66kB, dejando aproximadamente 190kB para todo lo demás (es decir, todas las estructuras de datos asignadas dinámicamente en el núcleo).
Eso es solo el núcleo. Sin los controladores que necesita, ni ningún espacio de usuario.
Entonces, sí, vas a necesitar un poco más de RAM.