ClickCease Welche Linux-Distribution ist am besten für die Embedded-Entwicklung geeignet?

Welche Linux-Distribution ist am besten für die Embedded-Entwicklung geeignet?

Joao Correia

1. Dezember 2022 - Technischer Evangelist

Wenn Ihr Unternehmen IoT-Lösungen einsetzt, wissen Sie, dass sich die Entwicklung eingebetteter Systeme ein wenig von der Standard-Desktop-Entwicklung unterscheidet. Die niedrigen Kosten von Linux sind für IoT-Entwickler attraktiv, weshalb es oft die erste Wahl für die Embedded-Entwicklung gegenüber teuren proprietären Kernels ist. Es ist nicht ungewöhnlich, dass Entwickler mit einer virtuellen Maschine in einer Umgebung arbeiten, die dem Zielgerät ähnelt, aber die Entwicklung auf einer VM kann umständlich sein. Stattdessen können Entwickler mit Distributionen arbeiten, die speziell für eingebettete Systeme entwickelt wurden.

Im Vergleich zu proprietären Betriebssystemen für eingebettete Systeme ist Linux kostengünstig, ermöglicht mehrere Anbieter von Software, Entwicklung und Support, verfügt über einen stabilen Kernel und erleichtert die Möglichkeit, den Quellcode zu lesen, zu ändern und weiterzugeben. Aus diesen und weiteren Gründen hat sich Linux zur ersten Wahl für eingebettete Systeme entwickelt.

Aber wenn es darum geht, Linux auf einem Gerät einzusetzen, gibt es zahlreiche Optionen. Bei der Entwicklung von Desktop- und Enterprise-Geräten entscheiden sich die Entwickler in der Regel für eine Distribution wie Ubuntu, um die Bereitstellungsumgebung bestmöglich zu imitieren, mit zusätzlicher Hilfe von Tools wie VirtualBox und Docker. Für die Programmierung von eingebetteten Systemen ist dieses Setup jedoch nur schwer geeignet. Die Entwicklungsumgebung ist ganz anders, und die Build-Ausgabe muss ein komplettes Software-Image für das Zielgerät enthalten: den Kernel, Gerätetreiber, Bibliotheken, Anwendungssoftware, vielleicht sogar den Bootloader.

Bei der Entwicklung von Linux-Distributionen für Embedded-Systeme beginnen viele mit einer Desktop-Distribution wie Debian oder Red Hat und entfernen unnötige Komponenten, bis das installierte Image für das Zielgerät geeignet ist. Dies ist ein natürlicher Weg, da viele Linux-Entwickler Desktop-Linux-Benutzer sind und auf ihre übliche Palette von Laufzeitpaketen zugreifen können. Eine Möglichkeit besteht darin, einen Bildschirm und eine Tastatur an ein Zielgerät anzuschließen und direkt auf diese Weise zu entwickeln. Dieser Ansatz kann jedoch schwierig sein. Desktop-Distributionen sind nicht für ressourcenarme Systeme gedacht, und das manuelle Hinzufügen und Löschen von Paketen kann eine schwierige und fehleranfällige Aufgabe sein.

Was ist Embedded Linux?

 

Automotive Computing, medizinische Geräte, Internet of Things (IoT) und Fabrikautomatisierung sind nur einige der eingebetteten Systeme, die auf Embedded Linux laufen. Wir wissen, dass Computer auf einer bestimmten Hardware laufen (z. B. CPU, Speicher, Motherboard), und Geräte mit eingebetteten Systemen laufen auch auf Mikroprozessoren und Controllern, aber in kleinerem Maßstab. Diese Geräte benötigen ein Betriebssystem, das weniger Ressourcen verbraucht, und die Entwickler müssen in der Lage sein, das Betriebssystem von ihren Desktops aus einzusetzen.

Embedded Linux ist für IoT-Entwickler oft die erste Wahl, da es kostengünstig ist, über Open-Source-Code verfügt, wenig Speicherplatz benötigt und mit weniger Ressourcen auskommen kann. Es ist eine stabile Option, was für Unternehmen, die Systeme einsetzen, die von mehreren Verbrauchern genutzt werden, entscheidend ist. Die Sorge vor Betriebssystemabstürzen ist nicht vorhanden. Das Android-Betriebssystem zum Beispiel basiert auf Linux und hat einen weltweiten Marktanteil von 87 %, und es ist sehr zuverlässig.

Ist Embedded Linux ein RTOS?

 

Ein proprietäres Echtzeit-Betriebssystem (RTOS) kann eine attraktive Alternative zu Embedded Linux sein, bringt aber auch seine eigenen Schwierigkeiten mit sich. Wenn Entwickler nach IoT-Entwicklungsplattformen und -methoden suchen, stoßen sie auf die Optionen von Embedded Linux oder einem RTOS. Es gibt deutliche Unterschiede zwischen den beiden, so dass Sie sorgfältig auswählen müssen, bevor Sie sich auf das eine oder das andere festlegen.

RTOS kann entwicklerfreundlicher sein, aber für Unternehmensanwendungen, bei denen Sie Anpassungen unterstützen oder mit anderen Entwicklerprojekten integrieren möchten, bietet Embedded Linux eine intuitivere Integrationsumgebung. Ein RTOS ist für zeitkritische Anwendungen konzipiert. Wenn Sie kein System mit kritischen zeitkritischen Ereignissen haben, bietet ein Embedded Linux-System mehr Flexibilität für Entwickler.

Was ist der Unterschied zwischen Linux und Embedded Linux?

 

Die meisten Entwickler wissen, dass Sie den Quellcode für das Zielsystem kompilieren müssen. Bei der Entwicklung für eingebettete Systeme schreiben die Entwickler den Code auf einem Desktop, stellen ihn aber in einer anderen Umgebung mit plattformübergreifenden Toolchains bereit. Der Einsatz von eingebetteten Systemen unterscheidet sich stark von dem von Desktops. Desktop-Computer zielen auf 8086-Mikroprozessorarchitekturen ab, aber eingebettete Systeme können auf verschiedene Mikroprozessoren abzielen, normalerweise ARM, 8051, PIC und AVR.

Einige weitere Unterschiede zwischen Desktop-Linux und Embedded Linux sind:

  • Eingebettete Systeme verbrauchen weniger Strom und werden in der Regel mit Batterien betrieben.
  • Eingebettete Systeme sind viel kompakter.
  • Viele eingebettete Systeme versorgen kritische Geräte wie Gesundheitswarnsysteme, medizinische Geräte, Nuklearmaschinen und Haussicherheitssysteme.
  • Ein eingebettetes Linux-System enthält nur die Komponenten, die für die Funktion auf dem Zielprozessor erforderlich sind, und nicht alle möglichen Treiber und Bibliotheken, die auf einer Vielzahl von Komponenten auf einem Desktop installiert sind.

Was ist ein Beispiel für ein eingebettetes Linux-Betriebssystem?

 

Der Linux-Kernel ist quelloffen und kann von jedermann verändert und in seiner veränderten Form weitergegeben werden. Es sind mehrere Desktop-Versionen von Linux auf dem Markt, ebenso wie mehrere Versionen von Embedded Linux verfügbar sind. Es steht den Entwicklern frei, mit ihrer eigenen angepassten Linux-Version zu arbeiten, aber es ist viel bequemer, mit einer bereits vorhandenen und stabilen Version zu arbeiten.

Wir haben bereits das Android-Betriebssystem erwähnt. Android ist ein eingebettetes Linux-System, das von Google entwickelt und unter einer Open-Source-Lizenz veröffentlicht wurde, die es anderen Entwicklern erlaubt, es zu verändern und zu verbreiten. Debian ist ein Beispiel für eine Desktop-Linux-Distribution, von der es auch eine in Raspberry Pi-Geräte integrierte Version gibt. Raspberry ist das Debian-basierte Betriebssystem, das für das kompakte Raspberry Pi-Computergerät verwendet wird.

Warum wird Linux in einem eingebetteten System verwendet?

 

Entwickler wählen Linux als Zielbetriebssystem für eingebettete Systeme aus einer Reihe von Gründen. Der erste Grund ist, dass Linux vollständig anpassbar ist. Entwickler können den Linux-Kernel frei verwenden und ihre eigene Distribution des Betriebssystems erstellen oder eine bestehende Distribution nehmen und kleine Änderungen hinzufügen, um ihre eigene Version zu erstellen.

Da Linux kostenlos ist, sind die Einstiegskosten für neue Entwickler, die es erst einmal ausprobieren wollen, gering. Je mehr Entwickler mit Linux arbeiten, desto größer ist die Wahrscheinlichkeit, dass es in Systeme integriert wird.

Und schließlich ist es weit verbreitet, so dass es von Drittentwicklern besser unterstützt wird. Wenn das Ziel darin besteht, ein System zu entwickeln, das andere Entwickler in ihre eigenen Projekte integrieren können, wird Linux intuitiver sein.

Wie wählt man ein Embedded Linux-Betriebssystem aus?

 

Die Wahl eines Embedded-Linux-Betriebssystems hängt in hohem Maße von Ihren Zielen, dem Betrieb des Zielgeräts, der Markteinführungszeit und der erforderlichen Reaktionsfähigkeit ab. Viele Entwickler entscheiden sich einfach für Android, weil es weit verbreitet und bekannt ist, aber hier sind ein paar Fragen, die Sie bei der Wahl des richtigen Betriebssystems berücksichtigen sollten:

  • Ist das Timing entscheidend? Wenn Sie eine Anwendung haben, die ein präzises Timing benötigt, sollte ein Echtzeitbetriebssystem verwendet werden. Linux ist kein RTOS, aber Erweiterungen wie RTLinux können in Betracht gezogen werden.
  • Sind Speichergröße und CPU-Leistung begrenzt? Ein typischer Linux-Kernel ist 1,5 MB groß, was für einige Systeme zu groß sein könnte. Es kann ein angepasster Linux-Kernel mit nur den richtigen Komponenten für die Anwendungsfunktionalität verwendet werden.
  • Ist die Netzwerkleistung wichtig? Mobile Anwendungen, die Android verwenden, verfügen über Netzwerkfunktionen, aber Android ist nicht notwendig, wenn die Netzwerkleistung im Vordergrund steht. Eine Alternative, die speziell für die Netzwerkleistung entwickelt wurde, ist OpenWRT/LEDE.
  • Wird es eine grafische Benutzeroberfläche geben? Die vorinstallierte Benutzeroberfläche von Android könnte eine gute Option für Systeme sein, die stark von der Benutzeroberfläche abhängen.
  • Ist die Zeit bis zur Marktreife kurz? Eine weit verbreitete Linux-Distribution wird die Entwicklungszeit verkürzen. Ubuntu wird häufig für schnellere Markteinführungen verwendet.

Welche Linux-Distribution ist am besten für die Embedded-Entwicklung geeignet?

 

Die Entwickler benötigen eine Umgebung, in der sie bequem Code schreiben und für das Zielbetriebssystem kompilieren können. Sie könnten eine virtuelle Maschine verwenden und die Zieldistribution einrichten, aber es ist viel bequemer und komfortabler, mit Tools zu arbeiten, die auf dem lokalen Rechner installiert und plattformübergreifend eingesetzt werden. Hier sind ein paar großartige Linux-Distributionen für die Embedded-Entwicklung:

 

Yocto 

 

yoctoproject-logo-ffd39db2

Eine sehr beliebte Nicht-Desktop-Option für Linux-Distributionen für eingebettete Systeme ist Yocto, auch bekannt als Openembedded. Yocto wird von einer Armee von Open-Source-Enthusiasten, einigen namhaften Technologievertretern und vielen Halbleiter- und Board-Herstellern unterstützt. Ein Yocto-Projekt-Build umfasst Target-Runtime-Binärdateien, Package Feed und Target SDK. Es kann leicht durch Schichten erweitert werden, die Funktionen und Merkmale hinzufügen. Die modulare Architektur von Yocto macht es sehr flexibel und bietet eine gut definierte Schichtpriorität und Überschreibungsmöglichkeit. Neue Versionen erscheinen alle sechs Monate und die Dokumentation ist immer gründlich.* Der einzige Nachteil von Yocto ist vielleicht, dass es für Neulinge schwierig sein kann, damit zurechtzukommen.

 

Buildroot 

 

buildroot

Buildroot zielt darauf ab, eine schlankere Version von Yocto zu sein. Buildroot unterstützt keine On-Target-Paketverwaltung und deaktiviert alle optionalen Kompilierzeiteinstellungen für alle Pakete. Sie können keine neuen Pakete in ein laufendes System installieren. Dies hinterlässt ein kleines System; so klein, dass viele Leute Buildroot einfach als Firmware-Generator bezeichnen (da die Images zum Zeitpunkt der Erstellung größtenteils festgelegt sind). Ein Buildroot-Projekt umfasst das Root-Dateisystem-Image und alle anderen Hilfsdateien, die für die Bereitstellung von Linux benötigt werden, den Kernel, den Boot-Loader und die Kernel-Module sowie die Toolchain, die zum Erstellen aller Ziel-Binärdateien verwendet wird. Der Hauptvorteil von Buildroot ist, dass es relativ einfach zu erlernen ist, insbesondere da es normale Makefiles und die Kconfig-Sprache verwendet. Der größte Nachteil ist, dass die minimale Natur von Buildroot die Anpassung schwierig macht.

 

OpenWRT/LEDE 

 

verschmelzen.svg

OpenWRT/LEDE zielt darauf ab, Binärabbilder für über das Netzwerk zugängliche Paketquellen zu erstellen. Es wird hauptsächlich für benutzerdefinierte Firmware für Consumer-Router verwendet. Wenn Sie Ersatz-Firmware für ein kommerzielles Gerät benötigen, insbesondere wenn Ihr eingebettetes Design auf Netzwerke ausgerichtet ist, sollte OpenWRT/LEDE Ihre erste Wahl sein. Es erlegt Ihrem Design jedoch erhebliche und unflexible politische Entscheidungen auf. Wenn Sie umfangreiche Anpassungen benötigen, empfehlen wir stattdessen Buildroot oder Yocto.

* Mehr zu den Leistungen: https://www.embitel.com/blog/embedded-blog/why-yocto-is-a-framework-of-choice-for-creation-of-embedded-linux-distributions

Wie werden Sicherheitsupdates auf eingebettete Systeme angewendet (und warum)?

 

Die Aktualisierung Ihrer Anwendungen auf eingebetteten Systemen ist eine schwierige Angelegenheit. Das falsche Patch-Szenario könnte dazu führen, dass Ihre Kunden ein "gebranntes" Gerät vorfinden. Unsichere Updates könnten zu einem gefährdeten Gerät führen. Sie könnten sich darauf verlassen, dass die Benutzer die Firmware manuell patchen, aber die Benutzer nehmen sich selten die Zeit und wissen nicht einmal, dass Updates wichtig sind. Dies führt ebenfalls zu einem gefährdeten System. So waren beispielsweise nicht gepatchte IoT-Geräte für einen der größten DDoS-Angriffe (Distributed Denial of Service) verantwortlich. Tatsächlich sind die IoT-Angriffe im Jahr 2019 um 300 % gestiegen. Es ist klar, dass Patches und Updates für die Sicherheit des Geräts und seiner Nutzer entscheidend sind.

Die Kommunikation über das Netz sollte stets verschlüsselt sein, und es sollte eine digitale Signatur verwendet werden, um sicherzustellen, dass ein Angreifer die Patch-Dateien nicht verändert. Verschlüsselte Kommunikation und digitale Signaturen verhindern Man-in-the-Middle-Angriffe und verhindern Manipulationen. Der allgemeine Arbeitsablauf für die Bereitstellung von Software-Updates sieht wie folgt aus:

 

  1. Rufen Sie über einen sicheren Kanal ein zentrales System ab, um festzustellen, ob ein Update verfügbar ist.
  2. Stellen Sie sicher, dass das aktuelle Update mit der installierten Version kompatibel ist.
  3. Laden Sie den Patch über einen sicheren Kanal herunter, um einen Man-in-the-Middle-Angriff zu vermeiden.
  4. Überprüfen Sie, dass die Datei nicht beschädigt ist, indem Sie eine Integritätsprüfung (z. B. eine Prüfsumme) durchführen.
  5. Überprüfen Sie, ob die digitale Signatur gültig ist.
  6. Entschlüsseln Sie die Datei.
  7. Extrahieren Sie alle komprimierten Dateien.
  8. Führen Sie alle Aktionen vor der Installation durch, wie z. B. das Erstellen von Backups für ein Rollback.
  9. Installieren Sie den Patch.
  10. Führen Sie alle Aktionen nach der Installation durch, wie z. B. das Bereinigen der Installationsdateien.
  11. Überprüfen Sie die Installation, um sicherzustellen, dass sie erfolgreich war, und führen Sie andernfalls ein Rollback durch.

Wie kann man Sicherheitsupdates ohne Neustart auf eingebettete Systeme anwenden?

 

Der oben beschriebene Arbeitsablauf ist Standard für Updates, aber die meisten Patches erfordern einen Neustart des Systems. Der Neustart eines Geräts unterbricht den Benutzer und könnte kritische Systeme ausschalten. Beispielsweise könnte der Neustart eines Hauptrouters zu schwerwiegenden Ausfallzeiten und Datenbeschädigungen in einem Unternehmensnetzwerk führen.

Anstatt einen Neustart zu erzwingen, kann ein Livepatching durchgeführt werden. Livepatching löst mehrere Probleme mit Updates für eingebettete Systeme. Es macht Neustarts überflüssig und verhindert, dass ein Gerät aufgrund fehlgeschlagener Aktualisierungen zum Absturz gebracht wird. Entwickler müssen keinen benutzerdefinierten Patching-Dienst für Embedded Linux mehr erstellen und sind nicht mehr darauf angewiesen, dass die Benutzer Anwendungen manuell aktualisieren.

Es gibt im Wesentlichen drei Möglichkeiten, Linux ohne Neustart zu aktualisieren: über die Kommandozeile, mit dem kexec-Tool oder mit einer Livepatch-Lösung. Alle drei, einschließlich Lösungen von Drittanbietern, und die Schritte zum Patchen werden in diesem Blogbeitrag behandelt.

 

Schlussfolgerung

 

Für jeden Entwickler, der nach einer Umgebung für eingebettete Systeme sucht, ist Linux eine beliebte Option mit mehreren verfügbaren Lösungen, Plattformen, Distributionen und Tools. Das von Ihnen gewählte Betriebssystem bestimmt viele Ihrer Umgebungsoptionen, aber eines ist klar: Sie brauchen immer eine Möglichkeit, Ihre Geräte zu patchen und zu aktualisieren. Live-Patching ist die beste Lösung, um zu verhindern, dass die Geräte Ihrer Kunden ausfallen, und sie dennoch auf dem neuesten Stand zu halten. Live-Patching sorgt dafür, dass die Systeme Ihrer Kunden sicher sind, und gibt ihnen gleichzeitig die Flexibilität, die Geräte neu zu starten, wenn sie es für richtig halten.

Erhalten Sie eine KOSTENLOSE 7-Tage-Testversion von KernelCare 

Zusammenfassung
Artikel Name
Welche Linux-Distribution ist am besten für die Embedded-Entwicklung geeignet?
Autor
Name des Herausgebers
TuxCare
Logo des Herausgebers

Sind Sie bereit für die Modernisierung Ihres Schwachstellen-Patching-Ansatzes mit automatisiertem, unterbrechungsfreiem Live-Patching von KernelCare Enterprise? Vereinbaren Sie einen Termin für ein Gespräch mit einem unserer Linux-Sicherheitsexperten!

Sprechen Sie mit einem Experten

Werden Sie ein TuxCare-Gastautor

Los geht's

E-Mail

Beitreten

4,500

Linux & Open Source
Fachleute!

Abonnieren Sie
unseren Newsletter