Raspberry Pi als Visual Studio Linux Remotesystem
In diesem Artikel zeige ich euch wie man den Raspberry Pi als Visual Studio Linux Remotesystem verwenden kann. Damit ist es nun möglich aus dem unter Windows laufenden Visual Studio 2017 Programme für Linux zu schreiben und diese über ein Linux Remotesystem zu debuggen und auszuführen.
Raspberry Pi als Visual Studio Linux Remotesystem
Das Endresultat dieses Tutorial Artikels ist folgendes: wir können in Visual Studio 2017 unter Windows ein C++ Linux Programm entwickeln. Kompiliert und ausgeführt wird dieses über ein anderes Gerät im Netzwerk. Dafür verwenden wir in diesem Fall einen Raspberry Pi. Wir benötigen dafür folgendes:
- einen Windows Rechner mit Visual Studio (mind. 2017)
- Raspberry Pi
der Raspberry Pi muss vom Windows Rechner über SSH erreichbar sein
Setup
Visual Studio besteht aus jeder Menge Modulen. Normalerweise installiert man nicht alle, sonst braucht die Entwicklungsumgebung gleich mal 50 GB Speicher. Für dieses Projekt müssen wir das „Linux Entwicklung mit C++“ Paket installieren. Man findet nun bei den neuen Projekten den Punkt „Plattformübergreifend Linux„.
Am einfachsten erstellt man für den ersten Versuch die vorgeschlagene Konsolenanwendung (ein Hello World), damit man die Funktion testen kann. Der Source Code ist relativ uninteressant, das Programm gibt nur eine Zeile Text aus. Viel interessanter ist, dass man vor dem Kompilieren und Ausführen noch eine Einstellung ergänzen muss:
Im neuen Projekt gibt es noch kein Remotesystem auf dem der Code kompiliert und ausgeführt werden soll. Visual Studio gibt uns aber genaue Informationen wo man diese Informationen nachträglich eingeben kann. Unter Extras -> Optionen -> Plattformübergreifend -> Verbindungs-Manager können beliebig viele entfernte Systeme definiert werden.
Über „Hinzufügen“ öffnet sich ein Dialog in die man die bekannten SSH Verbindungsdaten eintragen muss. In meinem Fall ist das die IP Adresse meines laufenden Raspberry Pi, der Port, der Benutzername und das Kennwort. Statt dem Kennwort kann man auch einen privaten Schlüssel, für alle die über SSH die Passwortauthentifizierung aus Sicherheitsgründen deaktiviert haben. Beim Verbindungsaufbau passiert dann jede Menge. Visual Studio prüft ob das externe System überhaupt in der Lage ist Source Code zu kompilieren (prüft ob g++ installiert ist) und gibt entsprechende Fehler aus. In diesem Fall müssen wir am Raspberry Pi zuerst nötige Pakete nachinstallieren. Bei mir war das nicht nötig, ich habe den Pi bereits eingerichtet, damit man darauf C++ Code kompilieren kann.
Visual Studio und Linux
Visual Studio kümmert sich um alles. Bei der Einrichtung von einem Remote Linux System wird nicht nur geprüft ob dort alles nötige installiert ist, es werden auch jede Menge Tasks abgearbeitet. Das beginnt bereits damit, dass unter Windows der externe Zugriff auf das System über die Firewall erlaubt werden muss. Neben Visual Studio 2017 muss auch rsync der Zugriff gestattet werden:
Rsync wird benötigt, damit der Projektordner mit dem Source Code vom Windows System mit dem Linux System auf dem Raspberry Pi abgeglichen werden kann. Visual Studio benötigt die Verbindung um die Tasks für das Kompilieren und Ausführen am entfernten System starten zu können. Außerdem liefert das entfernte System Konsolenausgaben zurück (Remote SSH Session).
Die erstmalige Einrichtung dauert etwas. Bei gleichzeitig geöffneter Konsole sieht man, dass am Raspberry Pi einige Tasks laufen. Hauptsächlich sind das sshd und rsync. Bei der Kompilierung ist das dann auch gcc.
Programm kompilieren
Nachdem alles einmalig eingerichtet ist hindert uns nichts mehr an der Implementierung eines neuen Programms. Wir können nun bereits das automatisch erzeugte Hello World Programm erstellen und ausführen. Visual Studio zeigt folgende Ausgaben:
Die Ausgaben sind selbsterklärend. Der Source Code wird auf den Raspberry Pi kopiert (dieser hat bei mir die IP Adresse 192.168.0.123). Danach wird der remote build Prozess gestartet der den Code kompiliert, linkt und das Ergebnis an Windows zurückschickt.
Programm ausführen
Wir können unser kleines Programm nun wie gewohnt ausführen und auch debuggen. Der einzige Unterschied ist, dass es remote ausgeführt wird und deshalb kein weiteres Fenster geöffnet wird. Im Output Fenster liefert uns Visual Studio nun die Ausgaben der entfernten Linux Konsole. Man kann wie gewohnt Breakpoints setzen und den Debugger benutzen.
Das Programm wurde mit einem Haltepunkt angehalten und danach die Zeile mit der Ausgabe über den Debugger ausgeführt. Das Linux-Konsolenfenster unten rechts zeigt uns die Ausgabe, das Programm funktioniert.
Raspberry Pi
Auf dem Raspberry Pi findet man im Home Verzeichnis vom Benutzer nun einen projects Ordner. Visual Studio legt dort automatisch für jedes Projekt einen Ordner mit dem Source Code an.
Bewertung
Visual Studio 2017 erlaubt es uns trotz Windows Entwicklungsumgebung einen Raspberry Pi als Remotesystem in der Entwicklung einzusetzen. Wir können somit Linux Programme mit dem mächtigen Visual Studio als IDE zu entwickeln. Meiner Meinung nach ist Microsoft derzeit auf dem richtigen Weg und baut mit der Verschmelzung von Windows und Linux eine starke Konkurrenz zu Apples Lösungen auf. Es kommt auch zu einer Win-Win Situation für Windows und Linux.
Fazit
Endlich kann man Linux Programme sehr einfach unter Windows im beliebten Visual Studio entwickeln. Bei mir hat das Beispielprojekt ohne große Konfiguration sofort funktioniert. Der Raspberry Pi ist eine günstige Lösung für kleine Projekte. Wenn Projekte größer werden sollte man aber auf einen leistungsfähigen Linux Rechner oder in die Cloud wechseln. Gerade dort versucht ja auch Microsoft fast alles hin zu verlegen (Stichwort Azure). Der Raspberry Pi war bei mir übrigens nur zweite Wahl, da mein Hoster die nötigen Werkzeuge nicht bereitgestellt hat.
Womit entwickelt ihr eure Linux Programme? Wäre Visual Studio eine mögliche Alternative in Kombination mit dem Raspberry Pi?
Bin beeindruckt. Kompakt formuliert. Mit minimalen Änderungen auch unter 2019 lauffähig, sogar mit einem pi zero. Danke!
Ja das ist eine feine Sache, leider gibt es Probleme wenn die Raspberry Seite- Includes und Libs hinzuziehen soll.
Das bolze eintragen der libs wie pthread usw.. im VS- reicht scheinbar nicht aus , muss man den Suchpfad beim gcc++ nochmal in einer gcc.ini oder ähnlich erweitern ?
Danke für Hinweise
Karsten aus Berlin