In welchen Fällen müsste man eingebettetes Linux oder einen Kernel auf einem Mikrocontroller verwenden?

Ich habe bereits Bare-Metal-Software geschrieben und FreeRTOS auf eingebetteten Geräten verwendet. Aber ich würde gerne verstehen, warum sich manche Leute dafür entscheiden, eingebettetes Linux oder einen Kernel auf einem eingebetteten Gerät zu verwenden? In welchen Fällen wäre es z. B. unvermeidlich, dass Sie eingebettetes Linux oder einen Kernel auf einem eingebetteten Gerät verwenden müssen. Wie würde man zu dem Schluss kommen, dass er eines dieser beiden Dinge braucht?

Zum Beispiel, wenn Sie eine komplexe Funktionalität implementieren müssen, die bereits unter Linux implementiert ist...
Denn manchmal haben die Leute keine Lust, erweiterte Dateisystemunterstützung, einen vollständigen TCP/IP-Stack, den USB-Stack, verschiedene Hardwaretreiber, Mutexe, Threads, Prozessverwaltung, eine leistungsstarke Shell, eine Menge Bibliotheken, die alles können, usw. neu zu schreiben. .. Ja, die Leute sind faul, nicht wahr? Beachten Sie jedoch, dass es nie unvermeidlich ist, dies zu verwenden. Es ist einfach viel effizienter in einer Reihe von Situationen.
Auch Multi-Processing.
@dim, Ihre glatte Beschreibung spricht nicht über (a) die Nachteile, wenn Sie diesen Berg von Software, den Sie aufgelistet haben, auf einen eingebetteten Mikrocontroller setzen oder (b) wie Sie ihn in ein Gerät mit kleinem Flash und RAM einbauen würden - könnten Sie Ihren Kommentar ausgleichen? Ansonsten ist es nur eine Wunschliste.
@tonym natürlich gibt es auch Nachteile. Viel (große Hardwareanforderungen, keine Kontrolle darüber, wie die Dinge ausgeführt werden, nicht wirklich für Echtzeit geeignet, langsamere Bootzeit, ...) Aber die Frage war: "Warum sollten Sie Linux in einer eingebetteten Umgebung verwenden?" , als hätte es keinen Sinn. Also habe ich den Teil "Warum würdest du nicht" nicht angesprochen, da OP auf dieser Seite bereits Gründe zu haben schien.
@dim, ich habe im OP-Beitrag "keinen Sinn" gesehen, aber die beiden bisher geposteten Antworten beantworten es gut, also sieht es so aus, als hätten sie es wie ich gelesen. Haben Sie Linux oft auf kleine eingebettete MCUs gesetzt, Sie lassen es für Anfänger einfach klingen?
@TonyM In der Tat konzentrieren sich beide Antworten auf kleine MCUs, aber eingebettet bedeutet nicht unbedingt klein. LPC32xx zum Beispiel wird als MCU beworben und kann ein vollwertiges Linux unterstützen. Ein Linux Board Support Package ist von NXP erhältlich und unterstützt die meisten Peripheriegeräte, wenn nicht alle. Aber ich habe auch nicht gesagt, dass es für Anfänger einfach ist, auch wenn es sicherlich einfacher ist, als das Ganze neu zu entwickeln, wenn Sie ein Äquivalent brauchen . Ich verstehe allerdings nicht, wohin du mich führen willst. Und was meine Legitimität betrifft, solche Dinge zu behaupten, ich habe keine. Ich tue hier nur so, als wäre ich sachkundig.

Antworten (2)

Im Allgemeinen würden Sie kein Betriebssystem für etwas verwenden, das echte Mikrocontroller-Aufgaben ausführt. In solchen Fällen stört das Betriebssystem mehr als es hilft. Bei Betriebssystemen geht es darum, Hardwareressourcen zu virtualisieren und Abstraktionen wie Threads und Prozesse bereitzustellen. Diese Dinge sind von geringem Nutzen, wenn die Hardware, die Sie steuern, einfach direkt zu steuern ist, es keine Probleme mit der Portabilität gibt und Betriebssysteme ohnehin nicht für Sie virtualisieren. Allzweck-Betriebssysteme bewältigen auch Echtzeitanforderungen nicht gut oder überhaupt nicht, und das ist bei echten Controller-Anwendungen oft wichtig.

Der Grund, warum Sie manchmal Betriebssysteme auf High-End-Mikrocontrollern sehen, ist, dass diese Prozessoren wirklich als eingebettete Computer und nicht wirklich als Controller verwendet werden. Wenn Sie eine Verbindung zu einer Standardtastatur oder -maus herstellen, ein Standarddisplay steuern, eine Verbindung zu einem Netzwerk herstellen, ein USB-Host sein, Dateien in einer beliebigen Baumstruktur speichern oder andere Dinge tun möchten, bei denen Betriebssysteme helfen sollen, dann ein Betriebssystem kann hilfreich sein.

Wer auch immer dies abgelehnt hat, es wäre interessant zu wissen, wogegen Sie Einwände erheben.

Linux auf Mikrocontrollern? Verwenden Sie nur Versionen ohne MMU (Memory Management Unit) - z. uC-Linux. Cortex-M (M - Mikrocontroller) hat MPU (Memory Protection Unit). Cortex-A (A - Anwendung) hat MMU. Normalerweise enthielten Mikroprozessoren keine gewöhnlichen Peripheriegeräte, die in üblichen Mikrocontrollern zu finden sind. Obwohl sehr schnell, führen Sie sowohl das Betriebssystem als auch die Benutzeranwendungen aus. Sie handhaben nicht sehr gut E/A-Pins und Protokolle, die eine geringe Latenz erfordern , sind aber ideal für die Handhabung von Bildern, Audio und die Übertragung von Megabytes an Daten mit hohem Durchsatz(USB, Ethernet usw.). Ein Raspberry-PI eignet sich gut zum Ansehen eines Films, aber er ist nicht geeignet, um beispielsweise die FOC-Steuerung eines Drehstrommotors zu implementieren. Aus ähnlichen Gründen wie den bereits diskutierten ist es nicht ungewöhnlich, Lösungen mit einem Board mit zwei Prozessoren zu finden: einem Cortex-A, auf dem Linux läuft, und einem Cortex-M, der für kritische Aufgaben zuständig ist (Beispiel UDOO-Board). Der BeagleBone ist etwas anders, wenn er in denselben Chip, dedizierte Steuerungs- und Timing-Peripheriegeräte integriert ist.

Ihre Beispiele sind weit genug voneinander entfernt, um klar unterschieden zu werden, aber die heutige Welt ist etwas verschwommener. Denken Sie daran, dass Sie Smart Plugs im Mikrocontroller-Stil mit einem ESP8266 und andere zu wettbewerbsfähigen Preisen finden können, die auf kostengünstigen Linux-basierten WLAN-Router-SoCs basieren. Tatsächlich gibt es eine Reihe von Anwendungen, die sich überschneiden zwischen dem, was Sie ein "einfaches" System aufbauen können, und dem, was Sie einem "komplexen" System anpassen können.