Kleinste eingebettete Linux-Distribution?

Ich frage gerne die Experten da draußen. Was ist die beste eingebettete Linux-Distribution für:

  • Flash-Speicher ~ 700 KB
  • Arbeitsspeicher ~ 256 KB
  • Prozessor: High-End-Arm Cortex M3 (etwas aus der STM32-Familie für zB)

Erforderliche Module: - Kernel-Core - Grundlegender Treibersatz: USB/Networking (für WiFi - Kein AP, nur Client, keine Sicherheit)/SPI/Uart/I2C

Ist das überhaupt möglich oder träume ich?

Die Idee ist, einen 5 $ High-End-CortexM3 zu verwenden und keine externen Speicher zu verwenden, damit ich die fertigen Treiber für SDIO/WiFi usw. genießen kann.

  • Ich habe die Frage mit einer Klarstellung zu WiFi aktualisiert. WiFi in dem Sinne, dass es ein einfacher, 08/15-Client ist. Nichts Besonderes, vielleicht Wep, wenn ich es passen kann.

  • Noch ein Update: Wie wäre es mit uCLinux?

Antworten (6)

Ich würde sagen, du träumst. Das Hauptproblem wird der begrenzte Arbeitsspeicher sein.

Im Jahr 2004 gelang es Eric Beiderman , einen Kernel mit 2,5 MB RAM zu booten , bei dem viele Funktionen entfernt wurden.

Das war jedoch auf x86, und Sie sprechen von ARM. Also habe ich versucht, den kleinstmöglichen ARM-Kernel für die „vielseitige“ Plattform (eine der einfachsten) zu bauen. Ich habe alle konfigurierbaren Optionen deaktiviert, einschließlich derjenigen, nach denen Sie suchen (USB, WiFi, SPI, I2C), um zu sehen, wie klein es werden würde. Ich beziehe mich hier nur auf den Kernel, und dieser enthält keine Userspace-Komponenten.

Die gute Nachricht: Es passt in Ihren Blitz. Das resultierende zImage ist 383204 Byte groß.

Die schlechte Nachricht: Mit 256 KB RAM kann es nicht booten:

$ size obj/vmlinux
  text     data     bss     dec     hex filename
734580    51360   14944  800884   c3874 obj/vmlinux

Das .text-Segment ist größer als Ihr verfügbarer RAM, daher kann der Kernel nicht dekomprimieren, geschweige denn Speicher zum Booten zuweisen, geschweige denn etwas Nützliches ausführen.

Eine Problemumgehung wäre die Verwendung der Execute-in-Place-Unterstützung (CONFIG_XIP), wenn Ihr System dies unterstützt (dh es kann Anweisungen direkt aus Flash abrufen). Das bedeutet jedoch, dass Ihr Kernel unkomprimiert in Flash passen muss und 734kB > 700kB. Außerdem sind die .data- und .bss-Abschnitte insgesamt 66 kB groß, sodass etwa 190 kB für alles andere übrig bleiben (dh alle dynamisch zugewiesenen Datenstrukturen im Kernel).

Das ist nur der Kern. Ohne die benötigten Treiber oder Userspace.

Also, ja, du wirst ein bisschen mehr RAM brauchen.

Tolle Antwort. Ich bin überrascht zu sehen, dass der reine Linux-Kernel so schwer ist. Ich habe eine Art Folgefrage. Gibt es Wrapper, mit denen ich Linux-Treiber mit anderen Betriebssystemen verwenden kann? Was ich an Linux mag, ist die Verfügbarkeit von Treibern. Jede einzelne Hardware, die ich anfasse, hat einen Linux-Treiber und es ist immer mühsam, diese zu portieren, der einzige Grund, warum ich mich für Linux interessiere, sind wirklich die Treiber, daher die Frage.
Nur eine Anmerkung zum Kernel-Boot-Link, ich habe in den folgenden Beiträgen von Eric gesehen, dass er es geschafft hat, das komprimierte Kernel-Image auf 190 KB und unkomprimiert auf etwa 360 KB zu bringen, so dass Sie es theoretisch unkomprimiert in Ihren Flash einbauen könnten. Weitere Informationen: elinux.org/Linux_Tiny, aber ich weiß nicht, wie der Status des Projekts ist.

IMO, du träumst. Besonders bei USB, Netzwerk und 802.11/WLAN. Ich glaube einfach nicht, dass Sie das tun können, und M3 ist wirklich eine Strecke.

OpenWRT ist eine der kleinsten und am besten integrierbaren Linux-Distributionen, die ich für Netzwerke kenne, und es ist schwierig, das unter 2 MB zu bekommen, besonders mit Wifi.

Versuchen Sie, sich nach High-End-ARM-Chips umzusehen, wenn Sie dies wirklich wollen, oder entscheiden Sie sich für die Broadcom- oder Atheros-SoCs, die derzeit in Routern üblich sind.

Sie können sehr gut Recht haben, aber ich habe die Frage mit einer Klarstellung zu WiFi aktualisiert. Ich würde nicht alle Protokolle, dchp / ip und grundlegende Sockets benötigen.

Hast du MMU auf dem Prozessor? Wenn Sie dies nicht tun, sollten Sie sich Folgendes ansehen: http://www.uclinux.org/ , das Ihnen eine viel kleinere Kernelgröße als erwähnt geben sollte. Es funktioniert für einige CortexM3-Atmel-Chips, also könnte es für Ihre funktionieren. Ich habe es nicht verwendet, also ist dies nur spekulativ. Doh, ich habe gerade gesehen, dass diese Frage aktualisiert wurde - nun, wenn Sie kein MMU haben (was Sie wahrscheinlich nicht haben), können Sie keinen "normalen" Kernel verwenden und müssten ucLinux verwenden.

@mihalo danke für den Hinweis auf uclinux +1 dafür. Ich habe eine Frage dazu gestellt.. Vielen Dank, wenn Sie helfen können..
Leider habe ich damit nicht viel Erfahrung, ich habe mir ucLinux-Ports angesehen und alle dort genannten Boards haben externen RAM. Der kleinste Kernel (unkomprimiert), den ich gesehen habe, war für ADI Blackfin - etwa 400 KB, aber das ist kein ARM und könnte für ARM erheblich größer sein. Für Atmels ARM-Mikroprozessoren waren es etwa 1,5 MB und sie alle verwendeten externen RAM.
Mihailo, danke, dass du dir die Zeit genommen hast, dich umzusehen.

Vielleicht möchten Sie NuttX als Alternative in Betracht ziehen, wenn Sie wirklich POSIX-Konformität auf einer kleinen Nicht-MMU-Plattform wünschen.

Das sieht ziemlich gut aus, aber es könnte sich lohnen, einige der Vor- und Nachteile im Vergleich zu Linux einzubeziehen, um eine vollständigere Antwort zu erhalten.

Ich erinnere mich nicht an die Einzelheiten, aber es gibt eine Firma, die Boards mit STM32F4s herstellt, auf denen uCLinux ausgeführt wird. Die Software kann heruntergeladen werden, aber sie haben sowohl externen RAM als auch Flash auf diesen Boards.

Als Randnotiz ist der Preis so hoch, dass Sie sich besser einen Pi oder Pine64 zulegen, es sei denn, Sie möchten dies als Lernerfahrung. Unser Unternehmen hat sich das angesehen und die Entwicklungskosten berücksichtigt und entschieden, dass es wirtschaftlich nicht machbar ist, wenn wir irgendetwas auf Embedded Linux mit stm32f4 ausführen würden, wenn wir nur die Kosten der Teile zählen.

Ausgezeichneter Artikel, der Stücklistenkosten für den Betrieb von uClinux auf M3/M4 enthält -- electronicdesign.com/embedded/…

uCLinux wird wahrscheinlich funktionieren. Sie haben jedoch keinen Speicherschutz auf dem System, da Sie keine MMU haben. Dies bedeutet, dass jeder Absturz in einer beliebigen Anwendung das gesamte System zum Absturz bringen kann. Auch ohne die MMU können Probleme mit der Speicherfragmentierung auftreten. Warum schauen Sie sich nicht eine der TI Sitaras an? Sie sind immer noch ziemlich billig und Sie können volles Linux darauf ausführen, was viel flexibler ist.