Kleinste Embedded Linux Distribution?

19

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

  • Flash-Speicher ~ 700 KB
  • Ram ~ 256 KB
  • Prozessor: High-End-Armcortex M3 (etwas aus der STM32-Familie für z. B.)

Erforderliche Module: - Kernelkern - Basis-Treibersatz: USB / Netzwerk (für WiFi - Kein AP, nur Client, keine Sicherheit) / SPI / Uart / I2C

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

Die Idee ist, ein 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 Erläuterungen zu WiFi aktualisiert. WiFi in dem Sinne, dass es ein einfacher, lauffähiger Client ist. Nichts Besonderes, vielleicht wep, wenn ich es passen kann.

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

Frank
quelle

Antworten:

26

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 , wobei 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 der von Ihnen gesuchten (USB, WiFi, SPI, I2C), um festzustellen, wie klein sie werden würden. 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 Bytes.

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 Arbeitsspeicher, sodass der Kernel nicht dekomprimieren kann, geschweige denn Speicher zum Booten zuweisen kann, geschweige denn alles Nützliche ausführen kann.

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

Das ist nur der Kernel. Ohne die Treiber, die Sie benötigen, oder einen Benutzerbereich.

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

Jeremy Kerr
quelle
1
Tolle Antwort. Ich bin überrascht zu sehen, dass der nackte 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 der Treiber. Jede einzelne Hardware, die ich berühre, hat einen Linux-Treiber, und es ist immer schwierig, diese zu portieren. Der einzige Grund, warum ich mich für Linux interessiere, sind die Treiber wirklich, daher die Frage.
Frank
Nur eine Anmerkung zum Kernel-Boot-Link, ich habe in den folgenden Posts von Eric gesehen, dass er es geschafft hat, das komprimierte Kernel-Image auf 190K zu bringen und um 360K zu dekomprimieren, so dass Sie es theoretisch unkomprimiert in Ihren Flash einfügen könnten. Weitere Informationen: elinux.org/Linux_Tiny Ich weiß jedoch nicht, wie der Status des Projekts ist.
Mihailo
5

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

OpenWRT ist eine der kleinsten und einbettbarsten Linux-Distributionen, die ich für das Networking kenne, und es ist schwierig, dies unter 2 MB zu erreichen, insbesondere mit Wifi.

Versuchen Sie, sich mit High-End-ARM-Chips zu befassen, wenn Sie dies wirklich möchten, oder mit den Broadcom- oder Atheros-SoCs, die derzeit in Routern üblich sind.

nemik
quelle
Sie können sehr gut richtig sein, aber ich habe die Frage mit Klarstellung auf WiFi aktualisiert .. Ich würde nicht alle Protokolle, DHCP / IP und grundlegende Sockets benötigen ..
Frank
4

Haben Sie eine 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 angegeben geben sollte. Es funktioniert für einige CortexM3 Atmel-Chips, daher funktioniert es möglicherweise auch für Ihre. Ich habe es nicht benutzt, das ist also nur spekulativ. Doh, ich habe gerade gesehen, dass diese Frage aktualisiert wurde - nun, wenn Sie keine MMU haben (was Sie wahrscheinlich nicht tun), können Sie keinen "normalen" Kernel verwenden und Sie müssten ucLinux verwenden.

Mihailo
quelle
@mihalo danke für den Hinweis auf uclinux +1 dafür. Ich habe eine Frage dazu gestellt. Schätzen Sie, ob Sie helfen können.
Frank
Leider habe ich nicht viel Erfahrung damit, 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 - so etwas wie 400 KB, aber das ist kein ARM und für ARM könnte er bedeutend größer sein. Für Atmels ARM-Mikroprozessoren waren es ungefähr 1,5 MB, und alle verwendeten externen RAM.
Mihailo
Mihailo danke, dass Sie sich die Zeit genommen haben, sich umzusehen.
Frank
2

Sie können NuttX als Alternative in Betracht ziehen, wenn Sie wirklich POSIX-Kompatibilität in einer kleinen Nicht-MMU-Plattform wünschen.

Thor
quelle
3
Das sieht ziemlich ordentlich aus, aber es könnte sich lohnen, einige der Vor- und Nachteile im Vergleich zu Linux zu berücksichtigen, um eine vollständigere Antwort zu erhalten.
PeterJ
2

Ich erinnere mich nicht an die Details, aber es gibt eine Firma, die Boards mit STM32F4 unter uCLinux herstellt. 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 besser dran sind, einen Pi oder Pine64 zu bekommen, es sei denn, Sie möchten dies als Lernerfahrung. Unsere Firma hat sich das angeschaut und die Entwicklungskosten in Betracht gezogen. Wenn wir irgendetwas unter Embedded Linux mit stm32f4 betreiben, ist das wirtschaftlich unmöglich, wenn wir nur die Teilekosten zählen.

Jan Dorniak
quelle
Ausgezeichneter Artikel, der Stücklistenkosten für die Ausführung von uClinux auf M3 / M4 enthält - electronicdesign.com/embedded/…
Scott Seidman
0

uCLinux wird wahrscheinlich funktionieren. Sie haben jedoch keinen Speicherschutz auf dem System, da Sie keine MMU haben. Dies bedeutet, dass ein Absturz in einer Anwendung das gesamte System zum Erliegen bringen kann. Sie können auch ohne MMU auf Speicherfragmentierungsprobleme stoßen. Schauen Sie sich doch eine der TI-Sitaras an. Sie sind immer noch ziemlich billig und Sie können volles Linux auf ihnen laufen lassen, was viel flexibler sein wird.

Fred Basset
quelle