SCW Icons
hero bg no divider
Blog

Entwicklung eingebetteter Geräte und eingebetteter Systeme — ein Überblick

Secure Code Warrior
Published Aug 11, 2021
Last updated on Mar 09, 2026

Bei Secure Code Warrior sind wir stets bemüht, unseren Schulungsbereich zu erweitern. Um Embedded-Entwickler und Sicherheitsmanager in die Lage zu versetzen, sichere eingebettete Systeme zu entwickeln, nutzen wir die Welt der Sicherheit eingebetteter Systeme. In diesem Beitrag werden wir die wichtigsten Dinge vorstellen, die Entwickler und Architekten über den Aufbau sicherer eingebetteter Systeme wissen sollten.

Ein eingebettetes Gerät ist eine unabhängige Recheneinheit mit eigener mikroprozessorbasierter Hard- und Software. Sie werden in der Regel verwendet, um dedizierte Funktionen auszuführen, entweder unabhängig voneinander oder als Teil größerer Systeme.

Was ist ein eingebettetes Gerät und System?

Eingebettete Geräte sind speziell entwickelte Computersysteme mit minimalistischer Hard- und Software, die so programmiert sind, dass sie bestimmte Funktionen ausführen. Je nach Verwendungszweck kann die Komplexität eingebetteter Geräte variieren.

Wenn ein eingebettetes System komplizierte, ressourcenintensive Operationen ausführen muss, kann seine Hardware aus mehreren Prozessoren mit verschiedenen miteinander verbundenen Peripheriegeräten bestehen. Wenn es jedoch für eine einfache Aufgabe konzipiert ist, enthält es möglicherweise nur einen einzigen Mikrocontroller.

Einige eingebettete Systeme sind Blackboxen ohne Benutzeroberfläche, während andere über detaillierte, grafische Benutzeroberflächen verfügen können.

Beispiele für eingebettete Geräte

Embedded-Geräte finden in zahlreichen Branchen Anwendung, von der Luft- und Raumfahrt bis zur Computertechnik und von Haushaltsgeräten bis hin zum Gesundheitswesen. Hier sind ein paar Beispiele:

  • Ein Thermostat in einer Klimaanlage.
  • Ein Fitness-Tracker mit kleinen elektrischen Komponenten, auf denen ein winziges Betriebssystem läuft, der nichts weiter kann, als deine Gesundheitsdaten aufzuzeichnen und zu synchronisieren.
  • Digitale Klimaanlagen.
  • Navigationssysteme in einem Flugzeug.
  • Digitaluhren.
  • GPS-Geräte.
  • Wi-Fi-Komponenten in Mikrowellenherden und anderer Unterhaltungselektronik.
  • Blutdruck- und Herzschlagmessgeräte.
  • Netzwerkkomponente in einem MRT-Gerät, das Daten an die Cloud sendet.

Ist ein Laptop ein eingebettetes Gerät?

Kurze Antwort: Nein. Lange Antwort:

Per Definition kapselt ein eingebettetes Gerät die gesamte Software und Hardware, die es zur Ausführung seiner Funktionen benötigt. Ein Laptop fasst in der Tat verschiedene Hardwarekomponenten in einem Metallgehäuse und umfasst die gesamte Software, die es benötigt, um seinen Funktionsumfang bereitzustellen.

Im Gegensatz zu typischen eingebetteten Systemen, die über einen vordefinierten, minimalen Funktionsumfang verfügen, ist ein Laptop jedoch eher für allgemeine Zwecke geeignet und kann für eine Vielzahl von Aktivitäten verwendet werden.

Eingebettete Geräte im Internet der Dinge

Eingebettete Systeme sind das Herzstück des IoT. Ihr intelligenter Kühlschrank kann dank eines eingebetteten Geräts über Ihr Mobilgerät gesteuert werden. Es ist ein in Ihr Sicherheitssystem integriertes Gerät, mit dem Sie CCTV-Aufnahmen aus tausend Meilen Entfernung ansehen können. Und wenn Sie einen Knopf drücken, um Ihr Auto hinter den Kulissen auf Autopilot zu schalten, ist es ein integriertes Gerät, das die ganze Magie ausübt.

Lebenszyklus der Entwicklung eingebetteter Software

Die folgenden Schritte gehören zum typischen Softwareentwicklungszyklus eines eingebetteten Geräts:

Schritt 1: Zweck und Anforderungen

Ein eingebettetes Gerät verfügt über einen bestimmten und präzisen Funktionsumfang. Aus diesem Grund ist es sehr wichtig, den Zweck und die Anforderungen explizit anzugeben, bevor mit der Entwicklung begonnen wird. Es wird empfohlen, ein detailliertes Entwurfsdokument für das System zu erstellen. Beantworten Sie Fragen wie:

  • Welche Funktionen erfüllt das Gerät?
  • Wird es Teil einer anderen Maschine sein oder wird es eigenständig funktionieren?
  • Sollte das Gerät eine Benutzeroberfläche haben? Falls ja, reicht eine Befehlszeile aus oder wird eine grafische Benutzeroberfläche benötigt?
  • Welche Größen-, Kosten- oder Stromverbrauchsgrenzen muss das Gerät einhalten?
  • Gibt es Leistungsbenchmarks? Wird z. B. erwartet, dass das Gerät in Echtzeit oder innerhalb bestimmter Schwellenwerte reagiert?

Schritt 2: Systemarchitektur

Sobald wir die individuellen Systemanforderungen identifiziert haben, sind wir bereit, die Systemarchitektur zu entwerfen. Beantworten Sie Fragen wie:

  • Welche Hardwarekomponenten werden für die Entwicklung des Geräts benötigt? Dazu gehört die Identifizierung der Schaltkreise, Prozessorchips und Mikrocontroller sowie aller erforderlichen internen und externen Peripheriegeräte.
  • Wie viel Strom benötigen die Komponenten?
  • Wird das Gerät mit dem Internet verbunden sein?
  • Welche Schnittstellen müssen hinzugefügt/entwickelt werden, damit das Gerät eine Verbindung zu anderen Geräten oder der größeren Maschine herstellen kann?
  • Wie werden Sie Verschlüsselung implementieren? (Denken Sie an Algorithmen, Schlüsselspeicher usw.)
  • Wie werden Sie potenzielle Sicherheitslücken, Exploits und Malware erkennen und vermeiden?

Schritt 3: Wählen Sie das Betriebssystem

Die Wahl des Betriebssystems bestimmt oft die Effizienz Ihrer eingebetteten Anwendungen. Wählen Sie also mit Bedacht. Windows für IoT schneidet zwar bei der Grafik gut ab, es mangelt jedoch an Hardwareunterstützung. Embedded Linux und Android sind kostenlos, wohingegen für VxWorks und Windows for IoT Lizenzkosten anfallen.

Bei Open-Source-Systemen wie Linux und Android haben Ihre Entwickler mehr Kontrolle über den Kernel. Bei proprietären Systemen ist der Standardfunktionsumfang des Kernels jedoch alles, womit Sie arbeiten können.

Es ist auch wichtig, bei der Auswahl eines Betriebssystems die Auswirkungen auf die Sicherheit zu berücksichtigen. Werden Sicherheitspatches schnell veröffentlicht, falls Sicherheitslücken entdeckt werden? Gibt es einen eingebauten Schutz vor den häufigsten Cybersicherheitsangriffen?

Schritt 4: Die Entwicklungstools

Verschiedene Programmiersprachen und Frameworks haben verschiedene Vor- und Nachteile. Abhängig von Ihren Funktions-, Geschwindigkeits- und Zuverlässigkeitsanforderungen können Sie eine Sprache/ein Framework der anderen vorziehen.

Wenn Ihre Anwendung webbasiert ist und Sie eine hohe Leistung wünschen, entscheiden Sie sich für Java.
Wenn Sie jedoch den schnellsten Durchsatz wünschen, entscheiden Sie sich für C/C++. Wenn Sie die beste Unterstützung für Bibliotheken von Drittanbietern wünschen, entscheiden Sie sich für Python.

Schritt 5: Codieren, Refaktorieren, testen, noch mehr programmieren

Sobald Sie sich für die Entwicklungsplattform entschieden haben, können Sie mit dem Programmieren beginnen. Denken Sie daran, dass eingebettete Systeme empfindliche Geräte mit begrenzten Hardware- und Softwareressourcen sind. Es ist daher von entscheidender Bedeutung, die besten Praktiken in Bezug auf Anwendungssicherheit und Leistung zu berücksichtigen.

Code-Reviews helfen bei der Optimierung des Codes und der Identifizierung potenzieller Fehler. Sie müssen auch so gründlich wie möglich testen. Stellen Sie sicher, dass Sie eine vollständige Liste aller Testfälle zusammenstellen, auf die das Gerät bei der Verwendung in der Produktion stoßen kann.

Schritt 6: Wartung und Support

Wie bei jeder anderen Anwendung/Gerät endet der Lebenszyklus nicht, wenn das eingebettete Gerät versendet und installiert wurde. Wenn das Gerät in der Produktion eingesetzt wird, werden neue Anwendungsfälle identifiziert, für die neue Funktionen hinzugefügt werden müssen. Für alle gemeldeten Fehler müssen möglicherweise auch neue Firmware-Updates veröffentlicht werden.

Die besten eingebetteten Programmiersprachen

Es gibt viele seriöse Organisationen wie IEEE und TIOBE, die Programmiersprachen nach Beliebtheit und Verwendung einstufen. Unabhängig davon, ob Sie das überprüfen TIOBE-Index, oder die IEEE-Spektrum, Sie werden ein gemeinsames Thema bemerken.

Die drei wichtigsten Sprachen sind immer C, Python und Java. Der TIOBE-Index für Juli 2021 rangiert C auf #1, Java auf #2 und Python auf #3. Laut dem Ranking von IEEE Spectrum für eingebettete Programmiersprachen lautet die Reihenfolge: Python, Java und dann C.

Wie unterscheidet sich in Java, C oder Python geschriebene Firmware?

Verschiedene Sprachen verwalten Speicher, Interaktionen mit dem Betriebssystem und Laufzeit auf unterschiedliche Weise. Beispielsweise werden Java-Anwendungen in einer speziellen Laufzeitumgebung ausgeführt, die als Java Virtual Machine oder JVM bekannt ist.

Die Speicherverwaltung in C/C++ erfolgt manuell, in Java oder Python müssen Sie sich jedoch nicht selbst um die Speicherverwaltung kümmern; die Sprache erledigt das für Sie. Außerdem müssen Sie in C Ihren Müll selbst einsammeln; d. h. wenn Sie dynamisch ein Stück Speicher zuweisen, müssen Sie es explizit selbst freigeben. Wenn Sie das nicht tun, führt das zu einem Speicherleck. In Java oder Python erfolgt die Garbage-Collection automatisch. C ist jedoch von Natur aus viel schneller als Java oder Python.

Eine Sache, die C und Java (aber insbesondere C) im Vergleich zu Python fehlt, ist die Verfügbarkeit von Bibliotheken von Drittanbietern. Python verfügt über eine umfangreichere Datenbank mit Bibliotheken, was es Entwicklern erheblich erleichtert, bestimmte Funktionen hinzuzufügen.

Wählen Sie insgesamt C, wenn:

  • Sie möchten eine Low-Level-Schnittstelle mit dem Betriebssystem und der Hardware.
  • Sie wollen die bestmögliche Leistung.
  • Ihre Entwickler kennen sich mit C/C++ aus.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Verwenden Sie Python, wenn:

  • Sie möchten Data-Science- oder Machine-Learning-Algorithmen implementieren.
  • Sie möchten umfangreiche Bibliotheksunterstützung von Drittanbietern.
  • Sie sind damit einverstanden, Geschwindigkeit gegen Benutzerfreundlichkeit einzutauschen.
  • Sie haben nur begrenzte Erfahrung in der Embedded-Entwicklung.
  • Sie benötigen keine Low-Level-Schnittstelle zum Betriebssystem oder zur Hardware.

Verwenden Sie Java, wenn:

  • Sie erstellen Webanwendungen.
  • Sie möchten eine einfachere Entwicklung als C, aber immer noch mehr Leistung als Python.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Wird C langsam aufhören, die erste Wahl für Embedded-Entwicklung zu sein?

Hochsprachen erleichtern das Programmieren, indem sie die Komplexität abstrahieren, die in C einfach nicht vermieden werden kann. Trotz der Veröffentlichung ausgefallenerer Sprachen und Frameworks ist C jedoch jahrzehntelang die erste Wahl in der Embedded-Entwicklung geblieben.

Dies liegt daran, dass die Geschwindigkeit, Leistung und Zuverlässigkeit, die es bietet, immer noch beispiellos sind. Die Tatsache, dass Python und große Teile des Java-Ökosystems (einschließlich Runtime, Sprache und Compiler) in C geschrieben sind, spricht Bände über die Effizienz und Beständigkeit der Sprache.

Vor diesem Hintergrund ist C für neue Entwickler, die die Einfachheit von Sprachen wie Python bevorzugen, zweifellos schwieriger zu erlernen. Dies führt zu einem spürbaren Rückgang der Größe der C-Entwickler-Community. Der Anstieg der Entwicklung von KI- und ML-Anwendungen veranlasst die Menschen auch dazu, Python gegenüber C zu wählen, einfach weil es eine bessere Bibliotheksunterstützung bietet.

Es ist wichtig, sich daran zu erinnern, dass Python erst seit Kurzem Teil der Die beste eingebettete Programmiersprache Debatte. Ja, die Akzeptanz könnte in den kommenden Jahren weiter zunehmen, aber wir erwarten nicht, dass C jemals aufhören wird, die erste Wahl für die Embedded-Entwicklung zu sein.

Warum sichere Codierung in C/C++ wichtig ist

Beim Schreiben von Code in C/C++ kann viel schief gehen. Der Zugriff auf eine Speicheradresse, die nicht mehr auf gültige Daten verweist, oder die falsche gemeinsame Nutzung von Daten zwischen Threads kann zum Absturz Ihrer gesamten Anwendung führen.

Bei eingebetteten Geräten sind diese Auswirkungen weitaus schwerwiegender, da ein Absturz in ihnen dazu führen kann, dass eine viel größere Maschine nicht mehr funktioniert. Wenn beispielsweise das Autopilotmodul in einem Auto abgeschaltet wird, kann das Auto Hindernissen nicht mehr ausweichen.

Hier sind weitere Gründe, warum die sichere Codierung von C/C++-Anwendungen so wichtig ist:

  • Unsichere Speicherverwaltung (Nullzeiger, Speicherbeschädigung, Stacküberläufe, Puffer- und Heap-Überläufe) führt zum Absturz der gesamten Anwendung.
  • Zeiger sind ein wesentlicher Bestandteil von C und C++. Der Umgang mit ihnen erfordert äußerste Sorgfalt und eine gründliche Kenntnis der zugrunde liegenden Konzepte.
  • Die Müllabfuhr erfolgt manuell. Dies macht es für Programmierer zwingend erforderlich, jeden dynamisch zugewiesenen Speicher explizit zu löschen. Unfreier oder falsch freigegebener Speicher kann zu Speicherlecks oder Beschädigung führen.
  • Es fehlt an standardisierten APIs für fortgeschrittene Datenstrukturen (z. B. Hash-Tabellen, Sets usw.), was die Entwickler zwingt, das Rad neu zu erfinden.

Es ist absolut wichtig, dass Entwickler in der sicheren Codierung von C/C++-Anwendungen geschult werden. Secure Code Warrior bietet eine personalisierte Lernplattform mit interaktiven Herausforderungen, Kursen und Prüfungen, die es Entwicklern ermöglichen, sicheren C/C++-Code zu schreiben. Hier geht es um sprache:framework-spezifische Inhalte, nicht nur um eine Änderung der allgemeinen konzeptionellen Schulung.

Auschecken wie wir der Automobil- und Transportindustrie helfen. Oder versuche eine Herausforderung beim Embed-Focus-Codieren heute, um zu erleben, wie wir Entwickler befähigen, sichere eingebettete Anwendungen zu schreiben!

Ressource ansehen
Ressource ansehen

In diesem Beitrag erhalten Sie einen Überblick über die Entwicklung eingebetteter Geräte und eingebetteter Systeme.

Interessiert an mehr?

Secure Code Warrior makes secure coding a positive and engaging experience for developers as they increase their skills. We guide each coder along their own preferred learning pathway, so that security-skilled developers become the everyday superheroes of our connected world.

learn more

Secure Code Warrior ist für Ihr Unternehmen da, um Ihnen zu helfen, Code während des gesamten Softwareentwicklungszyklus zu sichern und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, CISO oder jemand anderes sind, der sich mit Sicherheit befasst, wir können Ihrem Unternehmen helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.

Eine Demo buchen
Teilen auf:
linkedin brandsSocialx logo
Autor
Secure Code Warrior
Published Aug 11, 2021

Secure Code Warrior makes secure coding a positive and engaging experience for developers as they increase their skills. We guide each coder along their own preferred learning pathway, so that security-skilled developers become the everyday superheroes of our connected world.

This article was written by Secure Code Warrior's team of industry experts, committed to empowering developers with the knowledge and skills to build secure software from the start. Drawing on deep expertise in secure coding practices, industry trends, and real-world insights.

Teilen auf:
linkedin brandsSocialx logo

Bei Secure Code Warrior sind wir stets bemüht, unseren Schulungsbereich zu erweitern. Um Embedded-Entwickler und Sicherheitsmanager in die Lage zu versetzen, sichere eingebettete Systeme zu entwickeln, nutzen wir die Welt der Sicherheit eingebetteter Systeme. In diesem Beitrag werden wir die wichtigsten Dinge vorstellen, die Entwickler und Architekten über den Aufbau sicherer eingebetteter Systeme wissen sollten.

Ein eingebettetes Gerät ist eine unabhängige Recheneinheit mit eigener mikroprozessorbasierter Hard- und Software. Sie werden in der Regel verwendet, um dedizierte Funktionen auszuführen, entweder unabhängig voneinander oder als Teil größerer Systeme.

Was ist ein eingebettetes Gerät und System?

Eingebettete Geräte sind speziell entwickelte Computersysteme mit minimalistischer Hard- und Software, die so programmiert sind, dass sie bestimmte Funktionen ausführen. Je nach Verwendungszweck kann die Komplexität eingebetteter Geräte variieren.

Wenn ein eingebettetes System komplizierte, ressourcenintensive Operationen ausführen muss, kann seine Hardware aus mehreren Prozessoren mit verschiedenen miteinander verbundenen Peripheriegeräten bestehen. Wenn es jedoch für eine einfache Aufgabe konzipiert ist, enthält es möglicherweise nur einen einzigen Mikrocontroller.

Einige eingebettete Systeme sind Blackboxen ohne Benutzeroberfläche, während andere über detaillierte, grafische Benutzeroberflächen verfügen können.

Beispiele für eingebettete Geräte

Embedded-Geräte finden in zahlreichen Branchen Anwendung, von der Luft- und Raumfahrt bis zur Computertechnik und von Haushaltsgeräten bis hin zum Gesundheitswesen. Hier sind ein paar Beispiele:

  • Ein Thermostat in einer Klimaanlage.
  • Ein Fitness-Tracker mit kleinen elektrischen Komponenten, auf denen ein winziges Betriebssystem läuft, der nichts weiter kann, als deine Gesundheitsdaten aufzuzeichnen und zu synchronisieren.
  • Digitale Klimaanlagen.
  • Navigationssysteme in einem Flugzeug.
  • Digitaluhren.
  • GPS-Geräte.
  • Wi-Fi-Komponenten in Mikrowellenherden und anderer Unterhaltungselektronik.
  • Blutdruck- und Herzschlagmessgeräte.
  • Netzwerkkomponente in einem MRT-Gerät, das Daten an die Cloud sendet.

Ist ein Laptop ein eingebettetes Gerät?

Kurze Antwort: Nein. Lange Antwort:

Per Definition kapselt ein eingebettetes Gerät die gesamte Software und Hardware, die es zur Ausführung seiner Funktionen benötigt. Ein Laptop fasst in der Tat verschiedene Hardwarekomponenten in einem Metallgehäuse und umfasst die gesamte Software, die es benötigt, um seinen Funktionsumfang bereitzustellen.

Im Gegensatz zu typischen eingebetteten Systemen, die über einen vordefinierten, minimalen Funktionsumfang verfügen, ist ein Laptop jedoch eher für allgemeine Zwecke geeignet und kann für eine Vielzahl von Aktivitäten verwendet werden.

Eingebettete Geräte im Internet der Dinge

Eingebettete Systeme sind das Herzstück des IoT. Ihr intelligenter Kühlschrank kann dank eines eingebetteten Geräts über Ihr Mobilgerät gesteuert werden. Es ist ein in Ihr Sicherheitssystem integriertes Gerät, mit dem Sie CCTV-Aufnahmen aus tausend Meilen Entfernung ansehen können. Und wenn Sie einen Knopf drücken, um Ihr Auto hinter den Kulissen auf Autopilot zu schalten, ist es ein integriertes Gerät, das die ganze Magie ausübt.

Lebenszyklus der Entwicklung eingebetteter Software

Die folgenden Schritte gehören zum typischen Softwareentwicklungszyklus eines eingebetteten Geräts:

Schritt 1: Zweck und Anforderungen

Ein eingebettetes Gerät verfügt über einen bestimmten und präzisen Funktionsumfang. Aus diesem Grund ist es sehr wichtig, den Zweck und die Anforderungen explizit anzugeben, bevor mit der Entwicklung begonnen wird. Es wird empfohlen, ein detailliertes Entwurfsdokument für das System zu erstellen. Beantworten Sie Fragen wie:

  • Welche Funktionen erfüllt das Gerät?
  • Wird es Teil einer anderen Maschine sein oder wird es eigenständig funktionieren?
  • Sollte das Gerät eine Benutzeroberfläche haben? Falls ja, reicht eine Befehlszeile aus oder wird eine grafische Benutzeroberfläche benötigt?
  • Welche Größen-, Kosten- oder Stromverbrauchsgrenzen muss das Gerät einhalten?
  • Gibt es Leistungsbenchmarks? Wird z. B. erwartet, dass das Gerät in Echtzeit oder innerhalb bestimmter Schwellenwerte reagiert?

Schritt 2: Systemarchitektur

Sobald wir die individuellen Systemanforderungen identifiziert haben, sind wir bereit, die Systemarchitektur zu entwerfen. Beantworten Sie Fragen wie:

  • Welche Hardwarekomponenten werden für die Entwicklung des Geräts benötigt? Dazu gehört die Identifizierung der Schaltkreise, Prozessorchips und Mikrocontroller sowie aller erforderlichen internen und externen Peripheriegeräte.
  • Wie viel Strom benötigen die Komponenten?
  • Wird das Gerät mit dem Internet verbunden sein?
  • Welche Schnittstellen müssen hinzugefügt/entwickelt werden, damit das Gerät eine Verbindung zu anderen Geräten oder der größeren Maschine herstellen kann?
  • Wie werden Sie Verschlüsselung implementieren? (Denken Sie an Algorithmen, Schlüsselspeicher usw.)
  • Wie werden Sie potenzielle Sicherheitslücken, Exploits und Malware erkennen und vermeiden?

Schritt 3: Wählen Sie das Betriebssystem

Die Wahl des Betriebssystems bestimmt oft die Effizienz Ihrer eingebetteten Anwendungen. Wählen Sie also mit Bedacht. Windows für IoT schneidet zwar bei der Grafik gut ab, es mangelt jedoch an Hardwareunterstützung. Embedded Linux und Android sind kostenlos, wohingegen für VxWorks und Windows for IoT Lizenzkosten anfallen.

Bei Open-Source-Systemen wie Linux und Android haben Ihre Entwickler mehr Kontrolle über den Kernel. Bei proprietären Systemen ist der Standardfunktionsumfang des Kernels jedoch alles, womit Sie arbeiten können.

Es ist auch wichtig, bei der Auswahl eines Betriebssystems die Auswirkungen auf die Sicherheit zu berücksichtigen. Werden Sicherheitspatches schnell veröffentlicht, falls Sicherheitslücken entdeckt werden? Gibt es einen eingebauten Schutz vor den häufigsten Cybersicherheitsangriffen?

Schritt 4: Die Entwicklungstools

Verschiedene Programmiersprachen und Frameworks haben verschiedene Vor- und Nachteile. Abhängig von Ihren Funktions-, Geschwindigkeits- und Zuverlässigkeitsanforderungen können Sie eine Sprache/ein Framework der anderen vorziehen.

Wenn Ihre Anwendung webbasiert ist und Sie eine hohe Leistung wünschen, entscheiden Sie sich für Java.
Wenn Sie jedoch den schnellsten Durchsatz wünschen, entscheiden Sie sich für C/C++. Wenn Sie die beste Unterstützung für Bibliotheken von Drittanbietern wünschen, entscheiden Sie sich für Python.

Schritt 5: Codieren, Refaktorieren, testen, noch mehr programmieren

Sobald Sie sich für die Entwicklungsplattform entschieden haben, können Sie mit dem Programmieren beginnen. Denken Sie daran, dass eingebettete Systeme empfindliche Geräte mit begrenzten Hardware- und Softwareressourcen sind. Es ist daher von entscheidender Bedeutung, die besten Praktiken in Bezug auf Anwendungssicherheit und Leistung zu berücksichtigen.

Code-Reviews helfen bei der Optimierung des Codes und der Identifizierung potenzieller Fehler. Sie müssen auch so gründlich wie möglich testen. Stellen Sie sicher, dass Sie eine vollständige Liste aller Testfälle zusammenstellen, auf die das Gerät bei der Verwendung in der Produktion stoßen kann.

Schritt 6: Wartung und Support

Wie bei jeder anderen Anwendung/Gerät endet der Lebenszyklus nicht, wenn das eingebettete Gerät versendet und installiert wurde. Wenn das Gerät in der Produktion eingesetzt wird, werden neue Anwendungsfälle identifiziert, für die neue Funktionen hinzugefügt werden müssen. Für alle gemeldeten Fehler müssen möglicherweise auch neue Firmware-Updates veröffentlicht werden.

Die besten eingebetteten Programmiersprachen

Es gibt viele seriöse Organisationen wie IEEE und TIOBE, die Programmiersprachen nach Beliebtheit und Verwendung einstufen. Unabhängig davon, ob Sie das überprüfen TIOBE-Index, oder die IEEE-Spektrum, Sie werden ein gemeinsames Thema bemerken.

Die drei wichtigsten Sprachen sind immer C, Python und Java. Der TIOBE-Index für Juli 2021 rangiert C auf #1, Java auf #2 und Python auf #3. Laut dem Ranking von IEEE Spectrum für eingebettete Programmiersprachen lautet die Reihenfolge: Python, Java und dann C.

Wie unterscheidet sich in Java, C oder Python geschriebene Firmware?

Verschiedene Sprachen verwalten Speicher, Interaktionen mit dem Betriebssystem und Laufzeit auf unterschiedliche Weise. Beispielsweise werden Java-Anwendungen in einer speziellen Laufzeitumgebung ausgeführt, die als Java Virtual Machine oder JVM bekannt ist.

Die Speicherverwaltung in C/C++ erfolgt manuell, in Java oder Python müssen Sie sich jedoch nicht selbst um die Speicherverwaltung kümmern; die Sprache erledigt das für Sie. Außerdem müssen Sie in C Ihren Müll selbst einsammeln; d. h. wenn Sie dynamisch ein Stück Speicher zuweisen, müssen Sie es explizit selbst freigeben. Wenn Sie das nicht tun, führt das zu einem Speicherleck. In Java oder Python erfolgt die Garbage-Collection automatisch. C ist jedoch von Natur aus viel schneller als Java oder Python.

Eine Sache, die C und Java (aber insbesondere C) im Vergleich zu Python fehlt, ist die Verfügbarkeit von Bibliotheken von Drittanbietern. Python verfügt über eine umfangreichere Datenbank mit Bibliotheken, was es Entwicklern erheblich erleichtert, bestimmte Funktionen hinzuzufügen.

Wählen Sie insgesamt C, wenn:

  • Sie möchten eine Low-Level-Schnittstelle mit dem Betriebssystem und der Hardware.
  • Sie wollen die bestmögliche Leistung.
  • Ihre Entwickler kennen sich mit C/C++ aus.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Verwenden Sie Python, wenn:

  • Sie möchten Data-Science- oder Machine-Learning-Algorithmen implementieren.
  • Sie möchten umfangreiche Bibliotheksunterstützung von Drittanbietern.
  • Sie sind damit einverstanden, Geschwindigkeit gegen Benutzerfreundlichkeit einzutauschen.
  • Sie haben nur begrenzte Erfahrung in der Embedded-Entwicklung.
  • Sie benötigen keine Low-Level-Schnittstelle zum Betriebssystem oder zur Hardware.

Verwenden Sie Java, wenn:

  • Sie erstellen Webanwendungen.
  • Sie möchten eine einfachere Entwicklung als C, aber immer noch mehr Leistung als Python.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Wird C langsam aufhören, die erste Wahl für Embedded-Entwicklung zu sein?

Hochsprachen erleichtern das Programmieren, indem sie die Komplexität abstrahieren, die in C einfach nicht vermieden werden kann. Trotz der Veröffentlichung ausgefallenerer Sprachen und Frameworks ist C jedoch jahrzehntelang die erste Wahl in der Embedded-Entwicklung geblieben.

Dies liegt daran, dass die Geschwindigkeit, Leistung und Zuverlässigkeit, die es bietet, immer noch beispiellos sind. Die Tatsache, dass Python und große Teile des Java-Ökosystems (einschließlich Runtime, Sprache und Compiler) in C geschrieben sind, spricht Bände über die Effizienz und Beständigkeit der Sprache.

Vor diesem Hintergrund ist C für neue Entwickler, die die Einfachheit von Sprachen wie Python bevorzugen, zweifellos schwieriger zu erlernen. Dies führt zu einem spürbaren Rückgang der Größe der C-Entwickler-Community. Der Anstieg der Entwicklung von KI- und ML-Anwendungen veranlasst die Menschen auch dazu, Python gegenüber C zu wählen, einfach weil es eine bessere Bibliotheksunterstützung bietet.

Es ist wichtig, sich daran zu erinnern, dass Python erst seit Kurzem Teil der Die beste eingebettete Programmiersprache Debatte. Ja, die Akzeptanz könnte in den kommenden Jahren weiter zunehmen, aber wir erwarten nicht, dass C jemals aufhören wird, die erste Wahl für die Embedded-Entwicklung zu sein.

Warum sichere Codierung in C/C++ wichtig ist

Beim Schreiben von Code in C/C++ kann viel schief gehen. Der Zugriff auf eine Speicheradresse, die nicht mehr auf gültige Daten verweist, oder die falsche gemeinsame Nutzung von Daten zwischen Threads kann zum Absturz Ihrer gesamten Anwendung führen.

Bei eingebetteten Geräten sind diese Auswirkungen weitaus schwerwiegender, da ein Absturz in ihnen dazu führen kann, dass eine viel größere Maschine nicht mehr funktioniert. Wenn beispielsweise das Autopilotmodul in einem Auto abgeschaltet wird, kann das Auto Hindernissen nicht mehr ausweichen.

Hier sind weitere Gründe, warum die sichere Codierung von C/C++-Anwendungen so wichtig ist:

  • Unsichere Speicherverwaltung (Nullzeiger, Speicherbeschädigung, Stacküberläufe, Puffer- und Heap-Überläufe) führt zum Absturz der gesamten Anwendung.
  • Zeiger sind ein wesentlicher Bestandteil von C und C++. Der Umgang mit ihnen erfordert äußerste Sorgfalt und eine gründliche Kenntnis der zugrunde liegenden Konzepte.
  • Die Müllabfuhr erfolgt manuell. Dies macht es für Programmierer zwingend erforderlich, jeden dynamisch zugewiesenen Speicher explizit zu löschen. Unfreier oder falsch freigegebener Speicher kann zu Speicherlecks oder Beschädigung führen.
  • Es fehlt an standardisierten APIs für fortgeschrittene Datenstrukturen (z. B. Hash-Tabellen, Sets usw.), was die Entwickler zwingt, das Rad neu zu erfinden.

Es ist absolut wichtig, dass Entwickler in der sicheren Codierung von C/C++-Anwendungen geschult werden. Secure Code Warrior bietet eine personalisierte Lernplattform mit interaktiven Herausforderungen, Kursen und Prüfungen, die es Entwicklern ermöglichen, sicheren C/C++-Code zu schreiben. Hier geht es um sprache:framework-spezifische Inhalte, nicht nur um eine Änderung der allgemeinen konzeptionellen Schulung.

Auschecken wie wir der Automobil- und Transportindustrie helfen. Oder versuche eine Herausforderung beim Embed-Focus-Codieren heute, um zu erleben, wie wir Entwickler befähigen, sichere eingebettete Anwendungen zu schreiben!

Ressource ansehen
Ressource ansehen

Füllen Sie das unten stehende Formular aus, um den Bericht herunterzuladen

Wir bitten um Ihre Erlaubnis, Ihnen Informationen zu unseren Produkten und/oder verwandten Themen rund um sichere Codierung zuzusenden. Wir behandeln Ihre persönlichen Daten stets mit größter Sorgfalt und verkaufen sie niemals zu Marketingzwecken an andere Unternehmen.

Einreichen
scw success icon
scw error icon
Um das Formular abzusenden, aktivieren Sie bitte „Analytics“ -Cookies. Wenn Sie fertig sind, können Sie sie jederzeit wieder deaktivieren.

Bei Secure Code Warrior sind wir stets bemüht, unseren Schulungsbereich zu erweitern. Um Embedded-Entwickler und Sicherheitsmanager in die Lage zu versetzen, sichere eingebettete Systeme zu entwickeln, nutzen wir die Welt der Sicherheit eingebetteter Systeme. In diesem Beitrag werden wir die wichtigsten Dinge vorstellen, die Entwickler und Architekten über den Aufbau sicherer eingebetteter Systeme wissen sollten.

Ein eingebettetes Gerät ist eine unabhängige Recheneinheit mit eigener mikroprozessorbasierter Hard- und Software. Sie werden in der Regel verwendet, um dedizierte Funktionen auszuführen, entweder unabhängig voneinander oder als Teil größerer Systeme.

Was ist ein eingebettetes Gerät und System?

Eingebettete Geräte sind speziell entwickelte Computersysteme mit minimalistischer Hard- und Software, die so programmiert sind, dass sie bestimmte Funktionen ausführen. Je nach Verwendungszweck kann die Komplexität eingebetteter Geräte variieren.

Wenn ein eingebettetes System komplizierte, ressourcenintensive Operationen ausführen muss, kann seine Hardware aus mehreren Prozessoren mit verschiedenen miteinander verbundenen Peripheriegeräten bestehen. Wenn es jedoch für eine einfache Aufgabe konzipiert ist, enthält es möglicherweise nur einen einzigen Mikrocontroller.

Einige eingebettete Systeme sind Blackboxen ohne Benutzeroberfläche, während andere über detaillierte, grafische Benutzeroberflächen verfügen können.

Beispiele für eingebettete Geräte

Embedded-Geräte finden in zahlreichen Branchen Anwendung, von der Luft- und Raumfahrt bis zur Computertechnik und von Haushaltsgeräten bis hin zum Gesundheitswesen. Hier sind ein paar Beispiele:

  • Ein Thermostat in einer Klimaanlage.
  • Ein Fitness-Tracker mit kleinen elektrischen Komponenten, auf denen ein winziges Betriebssystem läuft, der nichts weiter kann, als deine Gesundheitsdaten aufzuzeichnen und zu synchronisieren.
  • Digitale Klimaanlagen.
  • Navigationssysteme in einem Flugzeug.
  • Digitaluhren.
  • GPS-Geräte.
  • Wi-Fi-Komponenten in Mikrowellenherden und anderer Unterhaltungselektronik.
  • Blutdruck- und Herzschlagmessgeräte.
  • Netzwerkkomponente in einem MRT-Gerät, das Daten an die Cloud sendet.

Ist ein Laptop ein eingebettetes Gerät?

Kurze Antwort: Nein. Lange Antwort:

Per Definition kapselt ein eingebettetes Gerät die gesamte Software und Hardware, die es zur Ausführung seiner Funktionen benötigt. Ein Laptop fasst in der Tat verschiedene Hardwarekomponenten in einem Metallgehäuse und umfasst die gesamte Software, die es benötigt, um seinen Funktionsumfang bereitzustellen.

Im Gegensatz zu typischen eingebetteten Systemen, die über einen vordefinierten, minimalen Funktionsumfang verfügen, ist ein Laptop jedoch eher für allgemeine Zwecke geeignet und kann für eine Vielzahl von Aktivitäten verwendet werden.

Eingebettete Geräte im Internet der Dinge

Eingebettete Systeme sind das Herzstück des IoT. Ihr intelligenter Kühlschrank kann dank eines eingebetteten Geräts über Ihr Mobilgerät gesteuert werden. Es ist ein in Ihr Sicherheitssystem integriertes Gerät, mit dem Sie CCTV-Aufnahmen aus tausend Meilen Entfernung ansehen können. Und wenn Sie einen Knopf drücken, um Ihr Auto hinter den Kulissen auf Autopilot zu schalten, ist es ein integriertes Gerät, das die ganze Magie ausübt.

Lebenszyklus der Entwicklung eingebetteter Software

Die folgenden Schritte gehören zum typischen Softwareentwicklungszyklus eines eingebetteten Geräts:

Schritt 1: Zweck und Anforderungen

Ein eingebettetes Gerät verfügt über einen bestimmten und präzisen Funktionsumfang. Aus diesem Grund ist es sehr wichtig, den Zweck und die Anforderungen explizit anzugeben, bevor mit der Entwicklung begonnen wird. Es wird empfohlen, ein detailliertes Entwurfsdokument für das System zu erstellen. Beantworten Sie Fragen wie:

  • Welche Funktionen erfüllt das Gerät?
  • Wird es Teil einer anderen Maschine sein oder wird es eigenständig funktionieren?
  • Sollte das Gerät eine Benutzeroberfläche haben? Falls ja, reicht eine Befehlszeile aus oder wird eine grafische Benutzeroberfläche benötigt?
  • Welche Größen-, Kosten- oder Stromverbrauchsgrenzen muss das Gerät einhalten?
  • Gibt es Leistungsbenchmarks? Wird z. B. erwartet, dass das Gerät in Echtzeit oder innerhalb bestimmter Schwellenwerte reagiert?

Schritt 2: Systemarchitektur

Sobald wir die individuellen Systemanforderungen identifiziert haben, sind wir bereit, die Systemarchitektur zu entwerfen. Beantworten Sie Fragen wie:

  • Welche Hardwarekomponenten werden für die Entwicklung des Geräts benötigt? Dazu gehört die Identifizierung der Schaltkreise, Prozessorchips und Mikrocontroller sowie aller erforderlichen internen und externen Peripheriegeräte.
  • Wie viel Strom benötigen die Komponenten?
  • Wird das Gerät mit dem Internet verbunden sein?
  • Welche Schnittstellen müssen hinzugefügt/entwickelt werden, damit das Gerät eine Verbindung zu anderen Geräten oder der größeren Maschine herstellen kann?
  • Wie werden Sie Verschlüsselung implementieren? (Denken Sie an Algorithmen, Schlüsselspeicher usw.)
  • Wie werden Sie potenzielle Sicherheitslücken, Exploits und Malware erkennen und vermeiden?

Schritt 3: Wählen Sie das Betriebssystem

Die Wahl des Betriebssystems bestimmt oft die Effizienz Ihrer eingebetteten Anwendungen. Wählen Sie also mit Bedacht. Windows für IoT schneidet zwar bei der Grafik gut ab, es mangelt jedoch an Hardwareunterstützung. Embedded Linux und Android sind kostenlos, wohingegen für VxWorks und Windows for IoT Lizenzkosten anfallen.

Bei Open-Source-Systemen wie Linux und Android haben Ihre Entwickler mehr Kontrolle über den Kernel. Bei proprietären Systemen ist der Standardfunktionsumfang des Kernels jedoch alles, womit Sie arbeiten können.

Es ist auch wichtig, bei der Auswahl eines Betriebssystems die Auswirkungen auf die Sicherheit zu berücksichtigen. Werden Sicherheitspatches schnell veröffentlicht, falls Sicherheitslücken entdeckt werden? Gibt es einen eingebauten Schutz vor den häufigsten Cybersicherheitsangriffen?

Schritt 4: Die Entwicklungstools

Verschiedene Programmiersprachen und Frameworks haben verschiedene Vor- und Nachteile. Abhängig von Ihren Funktions-, Geschwindigkeits- und Zuverlässigkeitsanforderungen können Sie eine Sprache/ein Framework der anderen vorziehen.

Wenn Ihre Anwendung webbasiert ist und Sie eine hohe Leistung wünschen, entscheiden Sie sich für Java.
Wenn Sie jedoch den schnellsten Durchsatz wünschen, entscheiden Sie sich für C/C++. Wenn Sie die beste Unterstützung für Bibliotheken von Drittanbietern wünschen, entscheiden Sie sich für Python.

Schritt 5: Codieren, Refaktorieren, testen, noch mehr programmieren

Sobald Sie sich für die Entwicklungsplattform entschieden haben, können Sie mit dem Programmieren beginnen. Denken Sie daran, dass eingebettete Systeme empfindliche Geräte mit begrenzten Hardware- und Softwareressourcen sind. Es ist daher von entscheidender Bedeutung, die besten Praktiken in Bezug auf Anwendungssicherheit und Leistung zu berücksichtigen.

Code-Reviews helfen bei der Optimierung des Codes und der Identifizierung potenzieller Fehler. Sie müssen auch so gründlich wie möglich testen. Stellen Sie sicher, dass Sie eine vollständige Liste aller Testfälle zusammenstellen, auf die das Gerät bei der Verwendung in der Produktion stoßen kann.

Schritt 6: Wartung und Support

Wie bei jeder anderen Anwendung/Gerät endet der Lebenszyklus nicht, wenn das eingebettete Gerät versendet und installiert wurde. Wenn das Gerät in der Produktion eingesetzt wird, werden neue Anwendungsfälle identifiziert, für die neue Funktionen hinzugefügt werden müssen. Für alle gemeldeten Fehler müssen möglicherweise auch neue Firmware-Updates veröffentlicht werden.

Die besten eingebetteten Programmiersprachen

Es gibt viele seriöse Organisationen wie IEEE und TIOBE, die Programmiersprachen nach Beliebtheit und Verwendung einstufen. Unabhängig davon, ob Sie das überprüfen TIOBE-Index, oder die IEEE-Spektrum, Sie werden ein gemeinsames Thema bemerken.

Die drei wichtigsten Sprachen sind immer C, Python und Java. Der TIOBE-Index für Juli 2021 rangiert C auf #1, Java auf #2 und Python auf #3. Laut dem Ranking von IEEE Spectrum für eingebettete Programmiersprachen lautet die Reihenfolge: Python, Java und dann C.

Wie unterscheidet sich in Java, C oder Python geschriebene Firmware?

Verschiedene Sprachen verwalten Speicher, Interaktionen mit dem Betriebssystem und Laufzeit auf unterschiedliche Weise. Beispielsweise werden Java-Anwendungen in einer speziellen Laufzeitumgebung ausgeführt, die als Java Virtual Machine oder JVM bekannt ist.

Die Speicherverwaltung in C/C++ erfolgt manuell, in Java oder Python müssen Sie sich jedoch nicht selbst um die Speicherverwaltung kümmern; die Sprache erledigt das für Sie. Außerdem müssen Sie in C Ihren Müll selbst einsammeln; d. h. wenn Sie dynamisch ein Stück Speicher zuweisen, müssen Sie es explizit selbst freigeben. Wenn Sie das nicht tun, führt das zu einem Speicherleck. In Java oder Python erfolgt die Garbage-Collection automatisch. C ist jedoch von Natur aus viel schneller als Java oder Python.

Eine Sache, die C und Java (aber insbesondere C) im Vergleich zu Python fehlt, ist die Verfügbarkeit von Bibliotheken von Drittanbietern. Python verfügt über eine umfangreichere Datenbank mit Bibliotheken, was es Entwicklern erheblich erleichtert, bestimmte Funktionen hinzuzufügen.

Wählen Sie insgesamt C, wenn:

  • Sie möchten eine Low-Level-Schnittstelle mit dem Betriebssystem und der Hardware.
  • Sie wollen die bestmögliche Leistung.
  • Ihre Entwickler kennen sich mit C/C++ aus.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Verwenden Sie Python, wenn:

  • Sie möchten Data-Science- oder Machine-Learning-Algorithmen implementieren.
  • Sie möchten umfangreiche Bibliotheksunterstützung von Drittanbietern.
  • Sie sind damit einverstanden, Geschwindigkeit gegen Benutzerfreundlichkeit einzutauschen.
  • Sie haben nur begrenzte Erfahrung in der Embedded-Entwicklung.
  • Sie benötigen keine Low-Level-Schnittstelle zum Betriebssystem oder zur Hardware.

Verwenden Sie Java, wenn:

  • Sie erstellen Webanwendungen.
  • Sie möchten eine einfachere Entwicklung als C, aber immer noch mehr Leistung als Python.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Wird C langsam aufhören, die erste Wahl für Embedded-Entwicklung zu sein?

Hochsprachen erleichtern das Programmieren, indem sie die Komplexität abstrahieren, die in C einfach nicht vermieden werden kann. Trotz der Veröffentlichung ausgefallenerer Sprachen und Frameworks ist C jedoch jahrzehntelang die erste Wahl in der Embedded-Entwicklung geblieben.

Dies liegt daran, dass die Geschwindigkeit, Leistung und Zuverlässigkeit, die es bietet, immer noch beispiellos sind. Die Tatsache, dass Python und große Teile des Java-Ökosystems (einschließlich Runtime, Sprache und Compiler) in C geschrieben sind, spricht Bände über die Effizienz und Beständigkeit der Sprache.

Vor diesem Hintergrund ist C für neue Entwickler, die die Einfachheit von Sprachen wie Python bevorzugen, zweifellos schwieriger zu erlernen. Dies führt zu einem spürbaren Rückgang der Größe der C-Entwickler-Community. Der Anstieg der Entwicklung von KI- und ML-Anwendungen veranlasst die Menschen auch dazu, Python gegenüber C zu wählen, einfach weil es eine bessere Bibliotheksunterstützung bietet.

Es ist wichtig, sich daran zu erinnern, dass Python erst seit Kurzem Teil der Die beste eingebettete Programmiersprache Debatte. Ja, die Akzeptanz könnte in den kommenden Jahren weiter zunehmen, aber wir erwarten nicht, dass C jemals aufhören wird, die erste Wahl für die Embedded-Entwicklung zu sein.

Warum sichere Codierung in C/C++ wichtig ist

Beim Schreiben von Code in C/C++ kann viel schief gehen. Der Zugriff auf eine Speicheradresse, die nicht mehr auf gültige Daten verweist, oder die falsche gemeinsame Nutzung von Daten zwischen Threads kann zum Absturz Ihrer gesamten Anwendung führen.

Bei eingebetteten Geräten sind diese Auswirkungen weitaus schwerwiegender, da ein Absturz in ihnen dazu führen kann, dass eine viel größere Maschine nicht mehr funktioniert. Wenn beispielsweise das Autopilotmodul in einem Auto abgeschaltet wird, kann das Auto Hindernissen nicht mehr ausweichen.

Hier sind weitere Gründe, warum die sichere Codierung von C/C++-Anwendungen so wichtig ist:

  • Unsichere Speicherverwaltung (Nullzeiger, Speicherbeschädigung, Stacküberläufe, Puffer- und Heap-Überläufe) führt zum Absturz der gesamten Anwendung.
  • Zeiger sind ein wesentlicher Bestandteil von C und C++. Der Umgang mit ihnen erfordert äußerste Sorgfalt und eine gründliche Kenntnis der zugrunde liegenden Konzepte.
  • Die Müllabfuhr erfolgt manuell. Dies macht es für Programmierer zwingend erforderlich, jeden dynamisch zugewiesenen Speicher explizit zu löschen. Unfreier oder falsch freigegebener Speicher kann zu Speicherlecks oder Beschädigung führen.
  • Es fehlt an standardisierten APIs für fortgeschrittene Datenstrukturen (z. B. Hash-Tabellen, Sets usw.), was die Entwickler zwingt, das Rad neu zu erfinden.

Es ist absolut wichtig, dass Entwickler in der sicheren Codierung von C/C++-Anwendungen geschult werden. Secure Code Warrior bietet eine personalisierte Lernplattform mit interaktiven Herausforderungen, Kursen und Prüfungen, die es Entwicklern ermöglichen, sicheren C/C++-Code zu schreiben. Hier geht es um sprache:framework-spezifische Inhalte, nicht nur um eine Änderung der allgemeinen konzeptionellen Schulung.

Auschecken wie wir der Automobil- und Transportindustrie helfen. Oder versuche eine Herausforderung beim Embed-Focus-Codieren heute, um zu erleben, wie wir Entwickler befähigen, sichere eingebettete Anwendungen zu schreiben!

Webinar ansehen
Fangen Sie an
learn more

Klicken Sie auf den Link unten und laden Sie das PDF dieser Ressource herunter.

Secure Code Warrior ist für Ihr Unternehmen da, um Ihnen zu helfen, Code während des gesamten Softwareentwicklungszyklus zu sichern und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, CISO oder jemand anderes sind, der sich mit Sicherheit befasst, wir können Ihrem Unternehmen helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.

Bericht ansehenEine Demo buchen
Ressource ansehen
Teilen auf:
linkedin brandsSocialx logo
Interessiert an mehr?

Teilen auf:
linkedin brandsSocialx logo
Autor
Secure Code Warrior
Published Aug 11, 2021

Secure Code Warrior makes secure coding a positive and engaging experience for developers as they increase their skills. We guide each coder along their own preferred learning pathway, so that security-skilled developers become the everyday superheroes of our connected world.

This article was written by Secure Code Warrior's team of industry experts, committed to empowering developers with the knowledge and skills to build secure software from the start. Drawing on deep expertise in secure coding practices, industry trends, and real-world insights.

Teilen auf:
linkedin brandsSocialx logo

Bei Secure Code Warrior sind wir stets bemüht, unseren Schulungsbereich zu erweitern. Um Embedded-Entwickler und Sicherheitsmanager in die Lage zu versetzen, sichere eingebettete Systeme zu entwickeln, nutzen wir die Welt der Sicherheit eingebetteter Systeme. In diesem Beitrag werden wir die wichtigsten Dinge vorstellen, die Entwickler und Architekten über den Aufbau sicherer eingebetteter Systeme wissen sollten.

Ein eingebettetes Gerät ist eine unabhängige Recheneinheit mit eigener mikroprozessorbasierter Hard- und Software. Sie werden in der Regel verwendet, um dedizierte Funktionen auszuführen, entweder unabhängig voneinander oder als Teil größerer Systeme.

Was ist ein eingebettetes Gerät und System?

Eingebettete Geräte sind speziell entwickelte Computersysteme mit minimalistischer Hard- und Software, die so programmiert sind, dass sie bestimmte Funktionen ausführen. Je nach Verwendungszweck kann die Komplexität eingebetteter Geräte variieren.

Wenn ein eingebettetes System komplizierte, ressourcenintensive Operationen ausführen muss, kann seine Hardware aus mehreren Prozessoren mit verschiedenen miteinander verbundenen Peripheriegeräten bestehen. Wenn es jedoch für eine einfache Aufgabe konzipiert ist, enthält es möglicherweise nur einen einzigen Mikrocontroller.

Einige eingebettete Systeme sind Blackboxen ohne Benutzeroberfläche, während andere über detaillierte, grafische Benutzeroberflächen verfügen können.

Beispiele für eingebettete Geräte

Embedded-Geräte finden in zahlreichen Branchen Anwendung, von der Luft- und Raumfahrt bis zur Computertechnik und von Haushaltsgeräten bis hin zum Gesundheitswesen. Hier sind ein paar Beispiele:

  • Ein Thermostat in einer Klimaanlage.
  • Ein Fitness-Tracker mit kleinen elektrischen Komponenten, auf denen ein winziges Betriebssystem läuft, der nichts weiter kann, als deine Gesundheitsdaten aufzuzeichnen und zu synchronisieren.
  • Digitale Klimaanlagen.
  • Navigationssysteme in einem Flugzeug.
  • Digitaluhren.
  • GPS-Geräte.
  • Wi-Fi-Komponenten in Mikrowellenherden und anderer Unterhaltungselektronik.
  • Blutdruck- und Herzschlagmessgeräte.
  • Netzwerkkomponente in einem MRT-Gerät, das Daten an die Cloud sendet.

Ist ein Laptop ein eingebettetes Gerät?

Kurze Antwort: Nein. Lange Antwort:

Per Definition kapselt ein eingebettetes Gerät die gesamte Software und Hardware, die es zur Ausführung seiner Funktionen benötigt. Ein Laptop fasst in der Tat verschiedene Hardwarekomponenten in einem Metallgehäuse und umfasst die gesamte Software, die es benötigt, um seinen Funktionsumfang bereitzustellen.

Im Gegensatz zu typischen eingebetteten Systemen, die über einen vordefinierten, minimalen Funktionsumfang verfügen, ist ein Laptop jedoch eher für allgemeine Zwecke geeignet und kann für eine Vielzahl von Aktivitäten verwendet werden.

Eingebettete Geräte im Internet der Dinge

Eingebettete Systeme sind das Herzstück des IoT. Ihr intelligenter Kühlschrank kann dank eines eingebetteten Geräts über Ihr Mobilgerät gesteuert werden. Es ist ein in Ihr Sicherheitssystem integriertes Gerät, mit dem Sie CCTV-Aufnahmen aus tausend Meilen Entfernung ansehen können. Und wenn Sie einen Knopf drücken, um Ihr Auto hinter den Kulissen auf Autopilot zu schalten, ist es ein integriertes Gerät, das die ganze Magie ausübt.

Lebenszyklus der Entwicklung eingebetteter Software

Die folgenden Schritte gehören zum typischen Softwareentwicklungszyklus eines eingebetteten Geräts:

Schritt 1: Zweck und Anforderungen

Ein eingebettetes Gerät verfügt über einen bestimmten und präzisen Funktionsumfang. Aus diesem Grund ist es sehr wichtig, den Zweck und die Anforderungen explizit anzugeben, bevor mit der Entwicklung begonnen wird. Es wird empfohlen, ein detailliertes Entwurfsdokument für das System zu erstellen. Beantworten Sie Fragen wie:

  • Welche Funktionen erfüllt das Gerät?
  • Wird es Teil einer anderen Maschine sein oder wird es eigenständig funktionieren?
  • Sollte das Gerät eine Benutzeroberfläche haben? Falls ja, reicht eine Befehlszeile aus oder wird eine grafische Benutzeroberfläche benötigt?
  • Welche Größen-, Kosten- oder Stromverbrauchsgrenzen muss das Gerät einhalten?
  • Gibt es Leistungsbenchmarks? Wird z. B. erwartet, dass das Gerät in Echtzeit oder innerhalb bestimmter Schwellenwerte reagiert?

Schritt 2: Systemarchitektur

Sobald wir die individuellen Systemanforderungen identifiziert haben, sind wir bereit, die Systemarchitektur zu entwerfen. Beantworten Sie Fragen wie:

  • Welche Hardwarekomponenten werden für die Entwicklung des Geräts benötigt? Dazu gehört die Identifizierung der Schaltkreise, Prozessorchips und Mikrocontroller sowie aller erforderlichen internen und externen Peripheriegeräte.
  • Wie viel Strom benötigen die Komponenten?
  • Wird das Gerät mit dem Internet verbunden sein?
  • Welche Schnittstellen müssen hinzugefügt/entwickelt werden, damit das Gerät eine Verbindung zu anderen Geräten oder der größeren Maschine herstellen kann?
  • Wie werden Sie Verschlüsselung implementieren? (Denken Sie an Algorithmen, Schlüsselspeicher usw.)
  • Wie werden Sie potenzielle Sicherheitslücken, Exploits und Malware erkennen und vermeiden?

Schritt 3: Wählen Sie das Betriebssystem

Die Wahl des Betriebssystems bestimmt oft die Effizienz Ihrer eingebetteten Anwendungen. Wählen Sie also mit Bedacht. Windows für IoT schneidet zwar bei der Grafik gut ab, es mangelt jedoch an Hardwareunterstützung. Embedded Linux und Android sind kostenlos, wohingegen für VxWorks und Windows for IoT Lizenzkosten anfallen.

Bei Open-Source-Systemen wie Linux und Android haben Ihre Entwickler mehr Kontrolle über den Kernel. Bei proprietären Systemen ist der Standardfunktionsumfang des Kernels jedoch alles, womit Sie arbeiten können.

Es ist auch wichtig, bei der Auswahl eines Betriebssystems die Auswirkungen auf die Sicherheit zu berücksichtigen. Werden Sicherheitspatches schnell veröffentlicht, falls Sicherheitslücken entdeckt werden? Gibt es einen eingebauten Schutz vor den häufigsten Cybersicherheitsangriffen?

Schritt 4: Die Entwicklungstools

Verschiedene Programmiersprachen und Frameworks haben verschiedene Vor- und Nachteile. Abhängig von Ihren Funktions-, Geschwindigkeits- und Zuverlässigkeitsanforderungen können Sie eine Sprache/ein Framework der anderen vorziehen.

Wenn Ihre Anwendung webbasiert ist und Sie eine hohe Leistung wünschen, entscheiden Sie sich für Java.
Wenn Sie jedoch den schnellsten Durchsatz wünschen, entscheiden Sie sich für C/C++. Wenn Sie die beste Unterstützung für Bibliotheken von Drittanbietern wünschen, entscheiden Sie sich für Python.

Schritt 5: Codieren, Refaktorieren, testen, noch mehr programmieren

Sobald Sie sich für die Entwicklungsplattform entschieden haben, können Sie mit dem Programmieren beginnen. Denken Sie daran, dass eingebettete Systeme empfindliche Geräte mit begrenzten Hardware- und Softwareressourcen sind. Es ist daher von entscheidender Bedeutung, die besten Praktiken in Bezug auf Anwendungssicherheit und Leistung zu berücksichtigen.

Code-Reviews helfen bei der Optimierung des Codes und der Identifizierung potenzieller Fehler. Sie müssen auch so gründlich wie möglich testen. Stellen Sie sicher, dass Sie eine vollständige Liste aller Testfälle zusammenstellen, auf die das Gerät bei der Verwendung in der Produktion stoßen kann.

Schritt 6: Wartung und Support

Wie bei jeder anderen Anwendung/Gerät endet der Lebenszyklus nicht, wenn das eingebettete Gerät versendet und installiert wurde. Wenn das Gerät in der Produktion eingesetzt wird, werden neue Anwendungsfälle identifiziert, für die neue Funktionen hinzugefügt werden müssen. Für alle gemeldeten Fehler müssen möglicherweise auch neue Firmware-Updates veröffentlicht werden.

Die besten eingebetteten Programmiersprachen

Es gibt viele seriöse Organisationen wie IEEE und TIOBE, die Programmiersprachen nach Beliebtheit und Verwendung einstufen. Unabhängig davon, ob Sie das überprüfen TIOBE-Index, oder die IEEE-Spektrum, Sie werden ein gemeinsames Thema bemerken.

Die drei wichtigsten Sprachen sind immer C, Python und Java. Der TIOBE-Index für Juli 2021 rangiert C auf #1, Java auf #2 und Python auf #3. Laut dem Ranking von IEEE Spectrum für eingebettete Programmiersprachen lautet die Reihenfolge: Python, Java und dann C.

Wie unterscheidet sich in Java, C oder Python geschriebene Firmware?

Verschiedene Sprachen verwalten Speicher, Interaktionen mit dem Betriebssystem und Laufzeit auf unterschiedliche Weise. Beispielsweise werden Java-Anwendungen in einer speziellen Laufzeitumgebung ausgeführt, die als Java Virtual Machine oder JVM bekannt ist.

Die Speicherverwaltung in C/C++ erfolgt manuell, in Java oder Python müssen Sie sich jedoch nicht selbst um die Speicherverwaltung kümmern; die Sprache erledigt das für Sie. Außerdem müssen Sie in C Ihren Müll selbst einsammeln; d. h. wenn Sie dynamisch ein Stück Speicher zuweisen, müssen Sie es explizit selbst freigeben. Wenn Sie das nicht tun, führt das zu einem Speicherleck. In Java oder Python erfolgt die Garbage-Collection automatisch. C ist jedoch von Natur aus viel schneller als Java oder Python.

Eine Sache, die C und Java (aber insbesondere C) im Vergleich zu Python fehlt, ist die Verfügbarkeit von Bibliotheken von Drittanbietern. Python verfügt über eine umfangreichere Datenbank mit Bibliotheken, was es Entwicklern erheblich erleichtert, bestimmte Funktionen hinzuzufügen.

Wählen Sie insgesamt C, wenn:

  • Sie möchten eine Low-Level-Schnittstelle mit dem Betriebssystem und der Hardware.
  • Sie wollen die bestmögliche Leistung.
  • Ihre Entwickler kennen sich mit C/C++ aus.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Verwenden Sie Python, wenn:

  • Sie möchten Data-Science- oder Machine-Learning-Algorithmen implementieren.
  • Sie möchten umfangreiche Bibliotheksunterstützung von Drittanbietern.
  • Sie sind damit einverstanden, Geschwindigkeit gegen Benutzerfreundlichkeit einzutauschen.
  • Sie haben nur begrenzte Erfahrung in der Embedded-Entwicklung.
  • Sie benötigen keine Low-Level-Schnittstelle zum Betriebssystem oder zur Hardware.

Verwenden Sie Java, wenn:

  • Sie erstellen Webanwendungen.
  • Sie möchten eine einfachere Entwicklung als C, aber immer noch mehr Leistung als Python.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Wird C langsam aufhören, die erste Wahl für Embedded-Entwicklung zu sein?

Hochsprachen erleichtern das Programmieren, indem sie die Komplexität abstrahieren, die in C einfach nicht vermieden werden kann. Trotz der Veröffentlichung ausgefallenerer Sprachen und Frameworks ist C jedoch jahrzehntelang die erste Wahl in der Embedded-Entwicklung geblieben.

Dies liegt daran, dass die Geschwindigkeit, Leistung und Zuverlässigkeit, die es bietet, immer noch beispiellos sind. Die Tatsache, dass Python und große Teile des Java-Ökosystems (einschließlich Runtime, Sprache und Compiler) in C geschrieben sind, spricht Bände über die Effizienz und Beständigkeit der Sprache.

Vor diesem Hintergrund ist C für neue Entwickler, die die Einfachheit von Sprachen wie Python bevorzugen, zweifellos schwieriger zu erlernen. Dies führt zu einem spürbaren Rückgang der Größe der C-Entwickler-Community. Der Anstieg der Entwicklung von KI- und ML-Anwendungen veranlasst die Menschen auch dazu, Python gegenüber C zu wählen, einfach weil es eine bessere Bibliotheksunterstützung bietet.

Es ist wichtig, sich daran zu erinnern, dass Python erst seit Kurzem Teil der Die beste eingebettete Programmiersprache Debatte. Ja, die Akzeptanz könnte in den kommenden Jahren weiter zunehmen, aber wir erwarten nicht, dass C jemals aufhören wird, die erste Wahl für die Embedded-Entwicklung zu sein.

Warum sichere Codierung in C/C++ wichtig ist

Beim Schreiben von Code in C/C++ kann viel schief gehen. Der Zugriff auf eine Speicheradresse, die nicht mehr auf gültige Daten verweist, oder die falsche gemeinsame Nutzung von Daten zwischen Threads kann zum Absturz Ihrer gesamten Anwendung führen.

Bei eingebetteten Geräten sind diese Auswirkungen weitaus schwerwiegender, da ein Absturz in ihnen dazu führen kann, dass eine viel größere Maschine nicht mehr funktioniert. Wenn beispielsweise das Autopilotmodul in einem Auto abgeschaltet wird, kann das Auto Hindernissen nicht mehr ausweichen.

Hier sind weitere Gründe, warum die sichere Codierung von C/C++-Anwendungen so wichtig ist:

  • Unsichere Speicherverwaltung (Nullzeiger, Speicherbeschädigung, Stacküberläufe, Puffer- und Heap-Überläufe) führt zum Absturz der gesamten Anwendung.
  • Zeiger sind ein wesentlicher Bestandteil von C und C++. Der Umgang mit ihnen erfordert äußerste Sorgfalt und eine gründliche Kenntnis der zugrunde liegenden Konzepte.
  • Die Müllabfuhr erfolgt manuell. Dies macht es für Programmierer zwingend erforderlich, jeden dynamisch zugewiesenen Speicher explizit zu löschen. Unfreier oder falsch freigegebener Speicher kann zu Speicherlecks oder Beschädigung führen.
  • Es fehlt an standardisierten APIs für fortgeschrittene Datenstrukturen (z. B. Hash-Tabellen, Sets usw.), was die Entwickler zwingt, das Rad neu zu erfinden.

Es ist absolut wichtig, dass Entwickler in der sicheren Codierung von C/C++-Anwendungen geschult werden. Secure Code Warrior bietet eine personalisierte Lernplattform mit interaktiven Herausforderungen, Kursen und Prüfungen, die es Entwicklern ermöglichen, sicheren C/C++-Code zu schreiben. Hier geht es um sprache:framework-spezifische Inhalte, nicht nur um eine Änderung der allgemeinen konzeptionellen Schulung.

Auschecken wie wir der Automobil- und Transportindustrie helfen. Oder versuche eine Herausforderung beim Embed-Focus-Codieren heute, um zu erleben, wie wir Entwickler befähigen, sichere eingebettete Anwendungen zu schreiben!

Inhaltsverzeichniss

PDF herunterladen
Ressource ansehen
Interessiert an mehr?

Secure Code Warrior makes secure coding a positive and engaging experience for developers as they increase their skills. We guide each coder along their own preferred learning pathway, so that security-skilled developers become the everyday superheroes of our connected world.

learn more

Secure Code Warrior ist für Ihr Unternehmen da, um Ihnen zu helfen, Code während des gesamten Softwareentwicklungszyklus zu sichern und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, CISO oder jemand anderes sind, der sich mit Sicherheit befasst, wir können Ihrem Unternehmen helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.

Eine Demo buchenHerunterladen
Teilen auf:
linkedin brandsSocialx logo
Ressourcen-Hub

Ressourcen für den Einstieg

Mehr Beiträge
Ressourcen-Hub

Ressourcen für den Einstieg

Mehr Beiträge