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.
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.
quelle
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.
quelle
Sie können NuttX als Alternative in Betracht ziehen, wenn Sie wirklich POSIX-Kompatibilität in einer kleinen Nicht-MMU-Plattform wünschen.
quelle
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.
quelle
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.
quelle