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

19

Me gustaría preguntarle a los expertos que están por ahí. ¿Cuál es la mejor distribución de Linux integrada para:

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

Módulos necesarios: - Kernel core - 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 ninguna memoria externa para poder disfrutar de los controladores listos para SDIO / WiFi, etc.

  • Actualicé la pregunta con aclaraciones sobre WiFi. WiFi en el sentido de que es un cliente simple y ejecutable de la fábrica. Nada de lujos, quizás lloremos si puedo encajar.

  • Otra actualización: ¿Qué tal uCLinux?

Franco
fuente

Respuestas:

26

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.

Jeremy Kerr
fuente
1
Gran respuesta ... Me sorprende ver que el núcleo de Linux es tan pesado ... Tengo una especie de pregunta de seguimiento ... ¿Hay alguna envoltura 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 difícil portarlos, la única razón por la que estoy interesado en Linux es realmente los controladores, de ahí la pregunta.
Frank
Solo una nota sobre el enlace de arranque del kernel, vi en las siguientes publicaciones de Eric que logró obtener la imagen del kernel comprimido a 190K y sin comprimir alrededor de 360K, por lo que teóricamente podría encajarlo en su flash sin comprimir. Más información: elinux.org/Linux_Tiny, sin embargo, no sé cuál es el estado del proyecto.
Mihailo
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 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.

nemik
fuente
es muy probable que tengas 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 ...
Frank
4

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

Mihailo
fuente
@mihalo gracias por señalar uclinux +1 por eso. He hecho una pregunta sobre eso ... Aprecio si puedes echar una mano ...
Frank
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
Mihailo, gracias por tomarse el tiempo para mirar alrededor ..
Frank
2

Es posible que desee considerar NuttX como una alternativa si realmente desea el cumplimiento de POSIX en una plataforma pequeña, no MMU.

Thor
fuente
3
Eso parece bastante bueno, pero podría valer la pena incluir algunos de los pros / contras en comparación con Linux para que sea una respuesta más completa.
PeterJ
2

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.

Jan Dorniak
fuente
Excelente artículo que incluye los costos de la lista de materiales para ejecutar uClinux en M3 / M4 - electronicdesign.com/embedded/…
Scott Seidman
0

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.

fred basset
fuente