¿La distribución de Linux integrada más pequeña?

Me gusta preguntar a los expertos por ahí... ¿Cuál es la mejor distribución de Linux integrada para:

  • Memoria flash ~ 700Kb
  • RAM ~ 256Kb
  • Procesador: Arm cortex M3 de gama alta (algo de la familia STM32, por ejemplo)

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?

Respuestas (6)

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.

Gran respuesta. Me sorprende ver que el kernel de Linux básico es tan pesado. Tengo una especie de pregunta de seguimiento. ¿Hay algún contenedor que me permita usar controladores de Linux con otros sistemas operativos? Lo que me gusta de Linux es la disponibilidad del controlador. Cada hardware que toco tiene un controlador de Linux y siempre es doloroso portarlos, la única razón por la que estoy interesado en Linux son los controladores, de ahí la pregunta.
Solo una nota sobre el enlace de arranque del kernel, vi en las siguientes publicaciones de Eric que logró obtener la imagen del kernel comprimida a 190K y sin comprimir alrededor de 360K, por lo que, en teoría, podría caber en su flash sin comprimir. Más información: elinux.org/Linux_Tiny sin embargo, no sé cuál es el estado del proyecto.

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.

es muy posible que tenga razón, sin embargo, actualicé la pregunta con una aclaración sobre WiFi ... No necesitaría todos los protocolos, dchp / ip y enchufes básicos ...

¿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.

@mihalo gracias por señalar uclinux +1 por eso. He hecho una pregunta sobre eso.. Agradezco si puede echar una mano..
Desafortunadamente, no tengo mucha experiencia con esto, miré los puertos ucLinux y todas las placas mencionadas allí tienen RAM externa. El kernel más pequeño (sin comprimir) que vi fue para ADI Blackfin, algo así como 400 KB, pero eso no es ARM y para ARM podría ser significativamente más grande. Para los microprocesadores Atmels ARM, era de alrededor de 1,5 MB y todos usaban RAM externa.
Mihailo gracias por tomarse el tiempo para mirar alrededor ..

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.

Eso se ve bastante bien, pero podría valer la pena incluir algunos de los pros y los contras en comparación con Linux para que sea una respuesta más completa.

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.

Excelente artículo que incluye los costos de BOM para ejecutar uClinux en M3/M4 -- electronicdesign.com/embedded/…

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.