Linux für eingebettete Systeme lernen
Ich wurde kürzlich gefragt, wie eine Person mit Erfahrung in der Programmierung eingebetteter Systeme mit 8-Bit-Prozessoren wie PIC sowie 32-Bit-Prozessoren wie PowerPC, aber ohne Linux-Erfahrung, lernen kann, wie man Embedded Linux verwendet.
Was ich einem solchen Programmierer für eingebettete Systeme immer empfehle, ist Folgendes: Betrachten Sie Embedded Linux als zwei Teile, den Embedded-Teil und den Linux-Teil. Betrachten wir zuerst den Linux-Teil.
Die Linux-Seite
Betriebssysteme gibt es zuhauf und die Möglichkeiten für ein eingebettetes System sind vielfältig, sowohl proprietär als auch Open Source. Linux ist eine dieser Optionen. Egal, was Sie für Ihren Entwicklungshost verwenden, ob Linux oder Windows oder Mac, Sie müssen lernen, wie Sie mit dem Zielbetriebssystem programmieren. In dieser Hinsicht unterscheidet sich die Verwendung von Embedded Linux nicht wesentlich von der Verwendung von VxWorks, WindowCE oder einem anderen Betriebssystem. Sie müssen verstehen, wie das Betriebssystem konzipiert ist, wie das Betriebssystem konfiguriert wird und wie mit seiner Anwendungsprogrammierschnittstelle (API) programmiert wird.
Einige Faktoren machen das Erlernen der Programmierung von Linux einfacher als andere eingebettete Betriebssysteme. Sie finden viele Bücher und Tutorials über Linux sowie Unix, von dem es abgeleitet ist — viel mehr als für andere Betriebssysteme. Online-Ressourcen für Linux sind reichlich vorhanden, während andere Betriebssysteme eine viel geringere Präsenz haben oder vom Betriebssystemhersteller gesteuert werden. Linux ist Open Source, und Sie können den Code lesen, um genau zu verstehen, was das Betriebssystem tut, was mit einem proprietären Betriebssystem, das als Binärdateien verteilt wird, oft unmöglich ist. (Ich empfehle sicherlich nicht, Linux Source zu lesen, um zu lernen, wie man Linux programmiert. Das ist, als würde man versuchen, das Fahren zu lernen, indem man untersucht, wie das Getriebe eines Autos funktioniert.)
Der wichtigste Faktor, der Linux von anderen Betriebssystemen unterscheidet, ist, dass für alle Systeme derselbe Kernel verwendet wird, von den kleinsten Embedded-Boards über Desktop-Systeme bis hin zu großen Serverfarmen. Dies bedeutet, dass Sie eine große Menge an Linux-Programmierung auf Ihrem Desktop in einer Umgebung erlernen können, die viel flexibler ist als die Verwendung eines Zielboards mit all der Komplexität der Verbindung zum Ziel, des Herunterladens einer Testprogrammierung und des Ausführens des Tests. Alle grundlegenden Konzepte und die meisten APIs sind für Ihr Desktop-Linux und Ihr Embedded-Linux identisch.
Linux installieren
Sie könnten eine Desktop-Linux-Distribution auf Ihrem Entwicklungssystem installieren und Ihr Windows- oder Mac-System ersetzen, aber das kann ein ziemlich großes Stück auf einmal sein, da Sie wahrscheinlich E-Mails konfigurieren, neue Tools erlernen und sich mit einer anderen Desktop-Oberfläche vertraut machen müssen. Sie können Linux in einer Dual-Boot-Umgebung installieren, in der Sie die alte Umgebung für E-Mails usw. verwenden., und verwenden Sie das Linux-System für das Lernen. Dies kann ziemlich umständlich sein, da Sie eine Umgebung herunterfahren müssen, um die andere aufzurufen. Darüber hinaus kann es unpraktisch oder unmöglich sein, entweder in einer Unternehmensumgebung zu arbeiten. IT-Leute bevorzugen es, eine bekannte Umgebung zu unterstützen, nicht eine, die Sie gewählt haben.
Eine einfachere Möglichkeit besteht darin, eine virtuelle Maschinenumgebung auf Ihrem aktuellen Entwicklungssystem zu erstellen. Für Windows-Hosts können Sie VMware Player oder VirtualBox installieren, und auf dem Mac können Sie Parallels oder VMware Fusion installieren. Die Verwendung einer VM bietet Ihnen viel mehr Flexibilität. Sie können eine Desktop-Linux-Distribution wie Ubuntu oder Fedora installieren. Sie können diese Distribution verwenden, um sich mit grundlegenden Linux-Konzepten vertraut zu machen, die Befehlsshell zu erlernen und zu lernen, wie Programme erstellt und ausgeführt werden. Sie können den Kernel neu konfigurieren oder Treiber laden, ohne befürchten zu müssen, dass Ihr Desktop-System abstürzt. Sie können die gesamte Kernel- und Anwendungsumgebung erstellen, ähnlich wie Sie es mit einer entwicklungsübergreifenden Umgebung für ein eingebettetes Linux-Ziel tun können.
Wenn Ihre VM unter Linux abstürzt, starten Sie die VM einfach neu. Der Absturz hat keine Auswirkungen auf andere Dinge, die Sie möglicherweise auf Ihrem Entwicklungssystem tun, z. B. das Lesen einer Webseite zum Erstellen und Installieren eines Treibers oder das Schreiben einer E-Mail an eine der vielen Support-Mailinglisten.
Einige der VM-Produkte verfügen über Snapshot-Funktionen, mit denen Sie einen Prüfpunkt einer bekannten Arbeitskonfiguration erstellen können, zu dem Sie einen Rollback durchführen können, wenn Sie einen Absturz nicht einfach beheben können. Dieser Snapshot ist viel einfacher als der Versuch, ein abstürzendes Desktop-System oder eine nicht reagierende Zielplatine zu retten.
Eine Linux-VM, die auf Ihrem Desktop ausgeführt wird, ist kein perfektes Modell für eine eingebettete Linux-Umgebung. Die VM emuliert die Hardware eines Desktop-Systems mit einer begrenzten Anzahl von Geräten, die wahrscheinlich nicht mit einem echten eingebetteten Ziel übereinstimmen. Unser Ziel an dieser Stelle ist es jedoch nicht, ein echtes Ziel zu modellieren (etwas, das wir später besprechen werden), sondern eine Umgebung zu schaffen, in der Sie Linux-Konzepte und -Programmierung leicht erlernen können.
Dies ist der erste Schritt: Erstellen Sie eine VM und installieren Sie eine Desktop-Linux-Distribution auf der VM. Wir werden in unserer nächsten Folge von hier auswählen.
Michael Eager ist Principal Consultant bei Eager Consulting in Palo Alto, Kalifornien. Er verfügt über mehr als vier Jahrzehnte Erfahrung in der Entwicklung von Compilern, Debuggern und Simulatoren für eine Vielzahl von Prozessorarchitekturen, die in eingebetteten Systemen verwendet werden. Zu seinen aktuellen und ehemaligen Kunden zählen große Halbleiterunternehmen und Systementwickler. Michael war Mitglied des ISO C++ Standard Committee und des ABI Committee für mehrere Prozessorarchitekturen. Er ist Vorsitzender des Debugging Standards Committee für DWARF, ein weit verbreitetes Debug-Datenformat. Er ist in der Open-Source- und Linux-Community aktiv.
Weiterführende Links:
- Linux lernen für eingebettete Systeme
- Erste Schritte mit Embedded Linux: Teil zwei
- Erste Schritte mit Embedded Linux: Teil drei
- Erste Schritte mit Embedded Linux: Teil vier
- Erste Schritte mit Embedded Linux: Teil fünf
- Erste Schritte mit Embedded Linux: Teil sechs
- Erste Schritte mit Embedded Linux: Teil sieben