Me gusta preguntar a los expertos por ahí... ¿Cuál es la mejor distribución de Linux integrada para:
Módulos necesarios: - Núcleo del kernel - Conjunto de controladores básicos: USB/Redes (para WiFi - Sin AP, solo cliente, sin seguridad)/SPI/Uart/I2C
¿Es esto posible o estoy soñando?
La idea es usar un CortexM3 de gama alta de 5 $ y no usar memorias externas para poder disfrutar de los controladores listos para SDIO/WiFi, etc.
Actualicé la pregunta con una aclaración sobre WiFi. WiFi en el sentido de que es un cliente simple y corriente. Nada lujoso, tal vez wep si puedo encajarlo.
Otra actualización: ¿Qué tal uCLinux?
Yo diría que estás soñando. El principal problema será la RAM limitada.
En 2004, Eric Beiderman logró que un kernel arrancara con 2,5 MB de RAM , con muchas funciones eliminadas.
Sin embargo, eso fue en x86 y estás hablando de ARM. Así que traté de construir el kernel ARM más pequeño posible, para la plataforma 'versátil' (una de las más simples). Apagué 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 núcleo aquí, y esto no incluye ningún componente del espacio de usuario.
La buena noticia: cabe en tu flash. La zImage 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 su RAM disponible, por lo que el kernel no puede descomprimirse, y mucho menos asignar memoria para arrancar, y mucho menos ejecutar algo útil.
Una solución alternativa sería usar 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 totalizan 66kB, dejando alrededor de 190kB para todo lo demás (es decir, todas las estructuras de datos asignadas dinámicamente en el kernel).
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.
En mi opinión, estás soñando. Especialmente con USB, redes y 802.11/wifi. Simplemente no creo que puedas hacer eso y M3 es realmente una exageración.
OpenWRT es una de las distribuciones de Linux más pequeñas e integrables que conozco para redes y es difícil conseguir menos 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 de Broadcom o Atheros que actualmente son comunes en los enrutadores.
¿Tiene MMU en el procesador? Si no lo hace, es posible que desee consultar: http://www.uclinux.org/ que debería darle un tamaño de núcleo mucho más pequeño que el mencionado. Funciona para algunos chips CortexM3 Atmel, por lo que podría funcionar para el tuyo. No lo he usado, así que esto es solo especulativo. Doh, acabo de ver que esa pregunta se ha actualizado; bueno, si no tiene MMU (que probablemente no tenga), no puede usar el kernel "normal" y necesitaría usar ucLinux.
Es posible que desee considerar NuttX como una alternativa si realmente desea el cumplimiento de POSIX en una plataforma pequeña que no sea MMU.
No recuerdo los detalles, pero hay una empresa que fabrica placas con STM32F4s 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 obtener un Pi o Pine64, a menos que desee esto como una experiencia de aprendizaje. Nuestra empresa lo investigó y consideró el costo de desarrollo y decidió que si tuviéramos que ejecutar algo en Linux integrado usando stm32f4 no es factible económicamente, solo contando el costo de las piezas.
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 provocar la caída de todo el sistema. También puede encontrar problemas de fragmentación de memoria sin la MMU. ¿Por qué no mirar uno de los TI Sitaras? Todavía son bastante baratos y puedes ejecutar Linux completo en ellos, lo que será mucho más flexible.
Franco
Mihailo