¿La distribución de linux incrustada más pequeña?

16

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

  • Memoria Flash ~ 700Kb
  • Ram ~ 256Kb
  • Procesador: Corteza de brazo de gama alta M3 (algo de la familia STM32 para, por ejemplo)

Módulos requeridos: - núcleo del núcleo - Conjunto básico de controladores: USB / redes (para WiFi - No AP, solo cliente, no hay 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 ninguna memoria externa 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 de lujos, tal vez wep si puedo encajar.

  • Otra actualización: ¿Qué hay de uCLinux?

pregunta Frank

6 respuestas

24

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.

    
respondido por el Jeremy Kerr
5

OMI, estás soñando. Especialmente con USB, redes y 802.11 / wifi. Simplemente no creo que puedas hacer eso y M3 es realmente un tramo.

OpenWRT es una de las distribuciones de Linux más pequeñas e integrables que conozco para redes y es difícil obtenerlas por debajo de 2 MB, especialmente con Wifi.

Intente buscar en los chips ARM de nivel superior si eso es lo que realmente quiere o elija los Broadcom o Atheros SoC que son comunes en los enrutadores.

    
respondido por el nemik
4

¿Tiene MMU en el procesador? Si no lo desea, puede consultar: enlace que le proporcionará un tamaño de kernel mucho más pequeño que el mencionado. Funciona para algunos chips Atmel de CortexM3, por lo que podría funcionar para los tuyos. No lo he usado así que esto es solo especulativo. Doh, acabo de ver que la pregunta se actualizó; bueno, si no tiene MMU (que probablemente no tenga), no puede usar el núcleo "normal" y tendría que usar ucLinux.

    
respondido por el Mihailo
2

No recuerdo los detalles, pero hay una compañía que fabrica tableros con STM32F4s que ejecutan uCLinux, el software se puede descargar, pero tienen RAM externa y flash en esos tableros.

Como nota al margen, el precio es tan alto que es mejor obtener un Pi o Pine64, a menos que desee que esto sea una experiencia de aprendizaje. Nuestra compañía lo analizó y consideró el costo de desarrollo y decidió que si ejecutáramos algo en Linux incorporado, stm32f4 no es factible económicamente, solo contando el costo de las partes.

    
respondido por el Jan Dorniak
1

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.

    
respondido por el Thor
0

uCLinux probablemente funcionará. Sin embargo, no tendrá protección de memoria en el sistema ya que no tiene MMU. Esto significa que cualquier fallo 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 a uno de los TI Sitaras? Todavía son bastante baratos y puedes ejecutar Linux completo en ellos, lo que será mucho más flexible.

    
respondido por el fred basset

Lea otras preguntas en las etiquetas