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.
OMI, estás soñando. Especialmente con USB, redes y 802.11 / wifi. Simplemente no creo que puedas hacer eso y M3 es realmente exagerado.
OpenWRT es una de las distribuciones de Linux más pequeñas e incrustables que conozco para redes y es difícil obtenerla por debajo de 2 MB, especialmente con Wifi.
Intente buscar chips ARM de gama alta si eso es lo que realmente quiere o vaya con los SoC Broadcom o Atheros que actualmente son comunes en los enrutadores.
fuente
¿Tienes MMU en el procesador? Si no lo hace, es posible que desee ver: http://www.uclinux.org/ que debería darle un tamaño de kernel mucho más pequeño que el mencionado. Funciona para algunos chips CortexM3 Atmel, por lo que podría funcionar para los suyos. No lo he usado, así que esto es solo especulativo. Doh, acabo de ver que esa pregunta se había actualizado, bueno, si no tienes MMU (que probablemente no tengas) no puedes usar el kernel "normal" y necesitarías usar ucLinux.
fuente
Es posible que desee considerar NuttX como una alternativa si realmente desea el cumplimiento de POSIX en una plataforma pequeña, no MMU.
fuente
No recuerdo los detalles, pero hay una compañía que fabrica placas con STM32F4 que ejecutan uCLinux, el software se puede descargar, pero tienen RAM externa y flash en esas placas.
Como nota al margen, el precio es tan alto que es mejor que obtenga un Pi o Pine64, a menos que desee esto como una experiencia de aprendizaje. Nuestra compañía lo examinó y consideró el costo de desarrollo y decidió que si ejecutamos algo en Linux incorporado usando stm32f4 no es económicamente factible, solo contando el costo de las piezas.
fuente
uCLinux probablemente funcionará. Sin embargo, no tendrá protección de memoria en el sistema ya que no tiene MMU. Esto significa que cualquier bloqueo en cualquier aplicación podría derribar todo el sistema. También puede encontrar problemas de fragmentación de memoria sin la MMU. ¿Por qué no mirar una de las TI Sitaras? Todavía son bastante baratos y puedes ejecutar Linux completo en ellos, lo que será mucho más flexible.
fuente