Yo diría que estás soñando. El principal problema será la RAM limitada.
En 2004, Eric Beiderman logró obtener un arranque del núcleo con 2.5MB de RAM , con una gran cantidad de funcionalidad eliminada.
Sin embargo, eso fue en x86, y estás hablando de ARM. Así que traté de 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ás buscando (USB, WiFi, SPI, I2C), para ver qué tan pequeño sería. Ahora, me estoy refiriendo al núcleo aquí, y esto no incluye ninguno componentes del espacio de usuario.
La buena noticia: encajará en tu flash. La imagen z resultante es de 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 la memoria RAM disponible, por lo que el kernel 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 kernel debe caber sin comprimir en flash, y 734kB > 700kB. Además, las secciones .data y .bss suman 66 kB, dejando aproximadamente 190 kB para todo lo demás (es decir, todas las estructuras de datos asignadas dinámicamente en el núcleo).
Eso es solo el kernel. Sin los controladores que necesita, o cualquier espacio de usuario.
Entonces, sí, vas a necesitar un poco más de RAM.