Kampis Elektroecke

Qt für den Raspberry Pi

Raspberry Pi

Wenn man für den Raspberry Pi eine grafische Oberfläche entwickeln möchte, landet man in den allermeisten Fällen bei Lösung mit Qt. Bei Qt handelt es sich um eine universelle C++ Bibliothek zum Erstellen von grafischen Oberflächen für verschiedene Betriebssysteme, wie z. B. Windows, Linux oder Android. Leider bietet ein Raspberry Pi nicht sehr viel Rechenleistung, weshalb das Entwickeln von grafischen Oberflächen auf dem Raspberry Pi eher unschön ist. Ein deutlich eleganterer Weg wäre es, wenn das Programm auf einem Host-PC entwickelt und dann per Remoteverbindung auf den Raspberry Pi kopiert und ausgeführt wird.

Und genau das soll Thema dieser Anleitung sein. Ich werde zeigen, wie der Raspberry Pi und ein Ubuntu Host-System genutzt werden können, um auf dem Host-System Qt-Applikationen für den Raspberry Pi zu entwickeln, die dann Remote auf dem Raspberry Pi ausgeführt werden.

Den Raspberry Pi vorbereiten:

Für einen reibungslosen Ablauf muss das Betriebssystem (hier Raspbian) auf dem Raspberry Pi auf den aktuellen Stand gebracht werden.

Anschließend müssen dann noch einige Pakete installiert werden:

Und zu guter letzt wird noch ein Ordner für die Qt-Installation angelegt:

Damit ist die Konfiguration des Raspberry Pi abgeschlossen. Weiter geht es mit dem Host…

Qt für den Raspberry Pi kompilieren:

Für das Host-System habe ich ein Ubuntu 16.04 LTS in einer virtuellen Maschine genutzt. Auch hier sollten zu Beginn erst einmal die Paketquellen und die Pakete aktualisiert, sowie ein paar zusätzliche Pakete installiert werden.

Anschließend werden die Arbeitsverzeichnisse angelegt und die Rechte entsprechend konfiguriert:

Für ein einfacheres Arbeiten wird dann noch ein SSH-Schlüssel für den Raspberry Pi erstellt, wodurch lästige Passworteingaben beim Kopieren der Daten vermieden werden.

Danach können die notwendigen Daten heruntergeladen werden.

Bei den Dateien handelt es sich um den Cross-Compiler für den Raspberry Pi, die verwendete Qt Version (hier 5.10.1) und ein Python-Skript um symbolische Links von Dateien durch relative Links zu ersetzen (wird später benötigt).

Anschließend wird die Qt-Version entpackt und der Name des verwendeten Compilers (hier arm-linux-gnueabihf) in der Konfigurationsdatei von Qt angepasst.

Nun werden noch die verwendeten Bibliotheken vom Target (hier der Raspberry Pi) Pi benötigt. Diese können mittels rsync vom Raspberry Pi heruntergeladen werden.

Das Herunterladen kann mitunter ein paar Minuten dauern. Diese Dateien werden nachher für den Build-Prozess von Qt benötigt, da Qt einige Standardbibliotheken vom Zielsystem (hier der Raspberry Pi) benötigt.

Bevor die Dateien aber genutzt werden können, müssen die symbolischen Links, die noch auf das Dateisystem des Raspberry Pi zeigen, durch relative Links des neuen sysroot-Verzeichnisses ersetzt werden. Dies geschieht mit Hilfe des heruntergeladenen Python-Skripts:

Abschließend wird Qt noch konfiguriert.

Bei der Konfiguration muss über den Parameter des Arguments -device der Typ des Targets angegeben werden. Für die Parameter gilt die nachfolgende Tabelle.

Target Option
Raspberry Pi 1 (+ Zero and Zero W) linux-rasp-pi-g++
Raspberry Pi 2 linux-rasp-pi2-g++
Raspberry Pi 3 linux-rasp-pi3-g++
Raspberry Pi 3 with VC4 driver linux-rasp-pi3-vc4-g++

Sobald die Konfiguration abgeschlossen ist, kann Qt kompiliert und installiert werden.

Über den Parameter -j4 gibt man die Anzahl der verwendeten Kerne an, wodurch der Prozess beschleunigt werden kann. Mit einem Kern dauert der komplette Vorgang gute 3-4 h (je nach System). Die fertig kompilierten Qt-Bibliotheken werden abschließend noch mittels rsync auf den Raspberry Pi kopiert. 

Die Qt-Bibliotheken und der Raspberry Pi sind damit einsatzbereit. Auf dem Raspberry Pi können jetzt bereits Qt-Anwendungen erstellt, kompiliert und ausgeführt werden. Das Ziel ist es aber, dass die Anwendungen auf dem Ubuntu Host-System entwickelt werden können. Wie das geht zeige ich im nächsten Schritt.

Einrichten des Qt Creators auf dem Host-System:

Für die Entwicklung von Qt-Anwendungen eignet sich der Qt Creator am besten. Da die Installation über die offiziellen Ubuntu Paketquellen bei mir nicht funktioniert hat, wodurch der Qt Creator immer abstützt, habe ich mir den Qt-Installer direkt von der Webseite heruntergeladen und ausgeführt.


Hinweis:

Dieser Schritt installiert die kompletten Qt-Bibliotheken, etc. auf dem Host-System und nicht nur den Qt Creator. 


Nach der Installation muss der Qt Creator noch für den Raspberry Pi konfiguriert werden. Dazu wird der Creator gestartet und das Menü ExtrasEinstellungen geöffnet. Anschließend wird das Untermenü Geräte geöffnet und auf Hinzufügen… geklickt um ein neues Generisches Linux-Gerät hinzuzufügen.

Über den Button Assistent starten wird die Auswahl bestätigt und ein neues Gerät angelegt:

Über WeiterAbschließen wird die Einrichtung des neuen Gerätes abgeschlossen. Der Qt Creator testet daraufhin die Einstellungen und versucht eine Verbindung zu dem Gerät herzustellen. 

Wenn der Test erfolgreich war, kann das Fenster geschlossen werden. Das neue Gerät wird nun in der Geräteliste aufgeführt.

Danach wird das Kit, also die Sammlung aus Compiler und Buildsourcen erstellt. Über Extras wird wieder das Menü Einstellungen geöffnet und der Punkt Kits ausgewählt. In dem Reiter Compiler wird durch den Button Hinzufügen ein Eintrag für einen C- und ein C++Compiler (beide unter GCC zu finden) hinzugefügt.

Compiler Pfad
C /opt/RaspberryQt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc
C++ /opt/RaspberryQt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++

Mit einem Klick auf Anwenden werden die Eingaben dann bestätigt.

Als nächstes wird die Qt Version für den Raspberry Pi angelegt. Dazu wird der Reiter Qt Versionen geöffnet und über den Button Hinzufügen wird dann ein neuer Eintrag angelegt. Es öffnet sich ein Dateibrowser, wo der Pfad des erstellen qmake-Files angegeben wird.

Die Eingabe wird mit einem Klick auf den Button Anwenden bestätigt.

Im letzten Schritt wird noch ein neuer Debugger angelegt. Dazu wird der Reiter Debugger geöffnet und über den Button Hinzufügen ein neuer Eintrag erstellt und ausgefüllt.

 Jetzt kann das Kit erstellt werden. Dazu wird der Reiter Kits geöffnet und über den Button Hinzufügen wird dann ein neues Kit angelegt. Die Maske wird nun entsprechend dem Screenshot ausgefüllt.

Auch hier wird die Eingabe mit einem Klick auf Anwenden bestätigt. Anschließend kann das Fenster über OK geschlossen werden.

Erstellen eines Testprojektes:

Jetzt, da alle Werkzeuge beisammen sind, soll auch mal ein Beispielprojekt auf dem Ubuntu Host-System entwickelt und Remote auf dem Raspberry Pi ausgeführt werden. Über DateiNeu… wird ein neues Qt-Widgets Projekt angelegt. Die einzelnen Eingaben werden mit Weiter bestätigt. Bei der Kitauswahl wird eben erstellte Raspberry Pi Kit als Kit ausgewählt.

Alle weiteren Eingaben können direkt mit Weiter bestätigt und der Assistent anschließend mit Abschließen beendet werden. Durch einen Klick auf den grünen Pfeil in der Sidebar oder mit der Tastenkombination Strg + R wird das Projekt erstellt und gestartet. Der Kompiliervorgang sollte ohne Probleme durchlaufen und die Anwendung ein paar Sekunden später auf dem Raspberry Pi gestartet werden.

Damit ist das Setup einsatzbereit und dem Entwickeln von grafischen Anwendungen auf dem PC für den Raspberry Pi steht nichts mehr im Wege.

Ich habe zwei Bash-Skripte angefertigt, die das komplette Installationsprozedre enthalten (sowohl für den Raspberry Pi als auch für das Host-System). Beide Skripte, sowie das Beispielprojekt können über mein GitLab-Repository heruntergeladen werden.

Last Updated on

6 Kommentare

  1. Funktioniert bei mir in einer virtuellen maschine mit debian9 32-bit leider nur bis zu dem Punkt, an dem Qt5 konfiguriert werden soll:
    Project ERROR: Cannot run target compiler ‘/opt/RaspberryQt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++’. Output:
    ===================
    sh: 1: /opt/RaspberryQt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++: not found
    ===================
    Maybe you forgot to setup the environment?

    1. Hallo Michael,

      liegt den die Raspberry Pi Toolchain an dem angegebenen Pfad?
      Das klingt nicht wie ein Problem mit dem Debian, sondern einfach nach einem falschen Pfad.

      Gruß
      Daniel

          1. Nein, nicht ausführbar! Das liegt vermutlich daran, dass ich in der virtuellen Maschine mit einem 32-bit System arbeite.
            Ich habe es nochmal auf meinem realen Ubuntu 18 mit Deinen Bash-Scripten versucht – schlug auch fehl.
            Ein neuer Versuch Schritt-für-Schritt “by hand” nach dieser Anleitung, ebenfalls auf Ubutntu 18 64-bit, brachte mich dann endlich soweit, dass Qt konfiguriert werden konnte. Compilierung läuft gerade…

          2. Mmh komisch. Der Compiler sollte doch die 32-Bit Version sein…
            Naja okay. Was gab es den für einen Fehler beim Skript? Ich hab das die Tage noch etwas modifiziert und noch 2x bei mir getestet und da lief es.

            Gruß
            Daniel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.