Ich frage gerne die Experten da draußen. Was ist die beste eingebettete Linux-Distribution für:
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?
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.
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.
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.
Vielleicht möchten Sie NuttX als Alternative in Betracht ziehen, wenn Sie wirklich POSIX-Konformität auf einer kleinen Nicht-MMU-Plattform wünschen.
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.
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.
Frank
Mihailo