
Qt auf dem Raspberry Pi 4
Qt wird oft verwendet, um grafische Schnittstellen zu entwickeln. Qt enthält C ++ -Bibliotheken zur Erstellung grafischer Schnittstellen, die auf verschiedenen Betriebssystemen kompiliert werden können.
Da diese Kompilierung viel Rechenleistung benötigt, empfiehlt es sich für Prozessoren mit relativ geringer Leistung, die Entwicklung und Kompilierung auf einem Host-Rechner durchzuführen und erst dann die fertige Anwendung auf den Zielrechner zu laden.
Es gibt online viele Anleitungen zum Entwickeln einer Qt-Anwendung für Raspberry Pi 3- und Pi 4-Modelle.
Leider konnte ich keine finden, die für den Raspberry Pi 4 und unsere Bedürfnisse einwandfrei funktionierte.
Diese Anweisungen basieren zu einem großen Anteil auf https://github.com/abhiTronix/raspberry-pi-cross-compilers/blob/master/QT_build_instructions.md und wurden an einigen Stellen so abgeändert, dass sie für mich funktionierten.
Für Qt wird Version 5.15.2 verwendet, und ich verwende ein Ubuntu 20.0.4 LTS, das in VMware als Host-Computer für die Cross-Kompilierung installiert ist.
Voraussetzungen
Hardware
- Host
[PC/Laptop]: Jeder x86/x86_64 AMD/Intel-Maschine
Ziel [Raspberry Pi 4]: Raspberry Pi 4
Software
- Host: Jeder Linux-Rechner (Ubuntu 20.04 LTS getestet)
Ziel: Raspberry Pi 4 Linux 32-bit OS (Raspbian Bullseye Lite getestet)
Hinweis
Im Hintergrund laufen die Cross-Compiler-Toolchains für Raspberry Pi von abhiTronix.
Sonstiges
Speicher- und Zeitanforderungen: Das Build-Verzeichnis benötigt ca. 10 GB Speicherplatz und ca. 2 bis 5 Stunden (basierend auf Abhängigkeiten und Host-Maschinenspezifikationen).
Netzwerk: Ihr Zielcomputer (Raspberry Pi) und Ihr Hostcomputer (auf dem Sie cross-kompilieren) MÜSSEN beide über Internetzugriff verfügen und sich im SELBEN NETZWERK BEFINDEN, um diese Anweisungen zu befolgen.
Vorbereitung des Raspberry Pi 4
Für die Basisinstallation benötigen wir auf dem Pi 4 das Raspberry Pi OS-Lite-Betriebssystem. Ich habe "2022-04-04-raspios-bullseye-armhf-lite.img.xz" verwendet.
Downloads und Anleitungen zum Erstellen einer SD-Karte finden Sie unter https://www.raspberrypi.org/downloads/raspbian/.
Nach dem Einschalten des Pi 4 erscheint das Konfigurationsmenü, in dem Sie verschiedene Einstellungen vornehmen können (z. B. Hostname, IP-Adresse, Benutzer usw.). Für unsere Konfiguration muss "SSH" aktiviert sein.
Softwarepakete installieren und aktualisieren
- Fügen Sie Entwicklungsquellen in "/etc/apt/sources.list" mit dem folgenden Befehl hinzu:
sudo sed -i -e 's/\#deb-src/deb-src/g' /etc/apt/sources.list
- Aktualisieren Sie dann das System mit den folgenden Befehlen:
sudo apt-get update
sudo apt-get -y dist-upgrade
echo "$USER ALL=NOPASSWD:$(which rsync)" | sudo tee --append /etc/sudoers
- Installieren Sie dann die erforderlichen Qt- und Entwicklungspakete:
sudo apt-get install -y build-essential cmake unzip pkg-config gfortran
sudo apt-get build-dep -y qt5-qmake libqt5gui5 libqt5webengine-data libqt5webkit5 libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 gdbserver
sudo apt-get install -y libxcb-randr0-dev libxcb-xtest0-dev libxcb-shape0-dev libxcb-xkb-dev
- Installieren Sie zusätzliche Pakete (je nach Bedarf):
sudo apt install -y libjpeg-dev libpng-dev libtiff-dev
sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt install -y libxvidcore-dev libx264-dev openjdk-8-jre-headless
# audio packages
sudo apt install -y libopenal-data libsndio7.0 libopenal1 libopenal-dev pulseaudio
# bluetooth packages
sudo apt install -y bluez-tools
sudo apt install -y libbluetooth-dev
# gstreamer (multimedia) packages
sudo apt install -y libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-pulseaudio
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
- Erstellen Sie dann außerdem ein Verzeichnis für RaspberryQt:
sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15
Wichtige Symlinks einrichten
Laden Sie das Symlinks-Tool herunter und passen Sie Symlinks an.
sudo wget -P ~/ https://raw.githubusercontent.com/abhiTronix/raspberry-pi-cross-compilers/master/utils/SSymlinker
sudo chmod +x ~/SSymlinker
~/SSymlinker -s /usr/include/arm-linux-gnueabihf/asm -d /usr/include
~/SSymlinker -s /usr/include/arm-linux-gnueabihf/gnu -d /usr/include
~/SSymlinker -s /usr/include/arm-linux-gnueabihf/bits -d /usr/include
~/SSymlinker -s /usr/include/arm-linux-gnueabihf/sys -d /usr/include
~/SSymlinker -s /usr/include/arm-linux-gnueabihf/openssl -d /usr/include
~/SSymlinker -s /usr/lib/arm-linux-gnueabihf/crtn.o -d /usr/lib/crtn.o
~/SSymlinker -s /usr/lib/arm-linux-gnueabihf/crt1.o -d /usr/lib/crt1.o
~/SSymlinker -s /usr/lib/arm-linux-gnueabihf/crti.o -d /usr/lib/crti.o
Ubuntu vorbereiten
Aktualisieren Sie die Software und installieren Sie zusätzliche Pakete:
sudo apt update
sudo apt install -y build-essential cmake unzip gfortran
sudo apt install -y gcc git bison python gperf pkg-config gdb-multiarch wget
sudo apt-get -y install sshpass gcc g++ gperf flex texinfo gawk bison openssl pigz libncurses-dev autoconf automake tar figlet
# Build-Umgebung vorbereiten
- Ordner erstellen:
sudo mkdir ~/rpi-qt
sudo mkdir ~/rpi-qt/build
sudo mkdir ~/rpi-qt/tools
sudo mkdir ~/rpi-qt/sysroot
sudo mkdir ~/rpi-qt/sysroot/usr
sudo mkdir ~/rpi-qt/sysroot/opt
sudo chown -R 1000:1000 ~/rpi-qt
- Qt-Quellen herunterladen und extrahieren:
sudo wget -P ~/rpi-qt http://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz
sudo tar xf ~/rpi-qt/qt-everywhere-src-5.15.2.tar.xz -C ~/rpi-qt/
sudo chown -R 1000:1000 ~/rpi-qt
- Patchen Sie die QT-Quellen.
cp -R ~/rpi-qt/qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabi-g++ ~/rpi-qt/qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabihf-g++
sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' ~/rpi-qt/qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.conf
sed -i -e 's/\"main\"\: \"vc_dispmanx_display_open(0)\;\"/\"main\"\: \[\"vc_dispmanx_display_open(0)\;\"\, \"EGL_DISPMANX_WINDOW_T \*eglWindow \= new EGL_DISPMANX_WINDOW_T\;\"\]/g' ~/rpi-qt/qt-everywhere-src-5.15.2/qtbase/src/gui/configure.json
- Compiler herunterladen und extrahieren:
sudo wget -P ~/rpi-qt/tools https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bullseye/GCC%2010.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.3.0-pi_3%2B.tar.gz
sudo tar xf ~/rpi-qt/tools/cross-gcc-*.tar.gz -C ~/rpi-qt/tools/
sudo chown -R 1000:1000 ~/rpi-qt
- rsync-Dateien von raspberry: Verwenden Sie Ihre Werte aus Ihrem Raspberry für die Variablen raspberry_ip, raspberry_user und raspberry_pwd.
raspberry_ip=192.168.2.108
raspberry_user=pi
raspberry_pwd=raspberry
touch ~/.ssh/known_hosts
ssh-keyscan $raspberry_ip >> ~/.ssh/known_hosts
sshpass -p "$raspberry_pwd" rsync -avz --rsync-path="sudo rsync" --delete "$raspberry_user"@"$raspberry_ip":/lib ~/rpi-qt/sysroot
sshpass -p "$raspberry_pwd" rsync -avz --rsync-path="sudo rsync" --delete "$raspberry_user"@"$raspberry_ip":/usr/include ~/rpi-qt/sysroot/usr
sshpass -p "$raspberry_pwd" rsync -avz --rsync-path="sudo rsync" --delete "$raspberry_user"@"$raspberry_ip":/usr/lib ~/rpi-qt/sysroot/usr
- Symbolische Links reparieren:
wget -P ~/rpi-qt https://raw.githubusercontent.com/abhiTronix/rpi_rootfs/master/scripts/sysroot-relativelinks.py
sudo chmod +x ~/rpi-qt/sysroot-relativelinks.py
~/rpi-qt/sysroot-relativelinks.py ~/rpi-qt/sysroot
- Qt-Build konfigurieren:
cd ~/rpi-qt/build
CROSS_COMPILER_LOCATION="$HOME"/rpi-qt/tools/cross-pi-gcc-*
../qt-everywhere-src-5.15.2/configure -release -opengl es2 -eglfs -device linux-rasp-pi4-v3d-g++ -device-option CROSS_COMPILE=$(echo $CROSS_COMPILER_LOCATION)/bin/arm-linux-gnueabihf- -sysroot ~/rpi-qt/sysroot/ -prefix /usr/local/qt5.15 -extprefix ~/rpi-qt/qt5.15 -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -nomake tests -make libs -pkg-config -no-use-gold-linker -v -recheck -L$HOME/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf -I$HOME/rpi-qt/sysroot/usr/include/arm-linux-gnueabihf
- Qt erstellen:
make -j$(nproc)
make install
- rsync Sie Qt-Binärdateien mit Raspberry:
sshpass -p "$raspberry_pwd" rsync -avz --rsync-path="sudo rsync" ~/rpi-qt/qt5.15 "$raspberry_user"@"$raspberry_ip":/usr/local
Letzter Schritt auf dem Zielcomputer (Raspberry Pi)
- Linker auf Raspberry Pi aktualisieren
Geben Sie den folgenden Befehl auf dem Raspberry Pi ein, um das Gerät zu aktualisieren, damit das Linker die neuen QT-Binärdateien finden kann:
echo /usr/local/qt5.15/lib | sudo tee /etc/ld.so.conf.d/qt5.15.conf
sudo ldconfig
Qt Creator installieren
Qt Creator ist die beste Art, um Qt-Anwendungen zu entwickeln. Um ihn zu installieren, laden Sie bitte die Online-Installationsdateien von der Qt-Website herunter und führen Sie sie aus.
Konfigurieren von Qt Creator für Cross-Kompilierungen
Im Blog Konfigurieren von Qt Creator auf Ubuntu 20 Lts für die Cross-Kompilierung erfahren Sie, wie Sie die kompilierten Binärdateien (Ordner ~/rpi-qt/qt5.15
) in Qt Creator einbetten können.
Anregungen oder Fehler
Wenn Sie Verbesserungsvorschläge haben oder Fehler entdecken – zögern Sie nicht, das Kontaktformular am Ende dieser Seite zu nutzen und uns diese mitzuteilen.
Urheberrechtslizenz
Copyright © 2022 Interelectronix e.K.
Dieser Projekt-Quellcode ist unter der GPL-3.0 Lizenz lizenziert.
Das könnte Sie auch interessieren
Raspberry Pi OS auf dem Raspberry Compute Module 4 installieren
Dies ist eine Anleitung für die Installation von Raspberry Pi OS Lite auf dem Compute Module 4. Als Arbeitscomputer verwende ich Ubuntu 20, installiert in einer virtuellen Maschine.
Qt 5.15 cross compile für Raspberry Compute Module 4 auf Ubuntu 20 LTS
Dies ist eine Anleitung für das Cross-Compiling von Qt 5.15.2 für Raspberry Pi 4 und die Installation auf dem Compute Module 4. Es ist ein Update zu meinem Blogpost Qt auf dem Raspberry Pi 4, mit dem Unterschied, daß ich diesmal Raspberry Pi OS Lite verwende.
Qt-Creator auf Ubuntu 20 LTS für Cross-Compile konfigurieren
Dies ist eine Anleitung für die Konfiguration des Qt-Creator um cross-compilierte Qt-Libraries für den Raspberry Pi 4 verwenden zu können und Anwendungen für den Raspberry zu erstellen.

In dieser Anleitung erfahren Sie, wie Sie ein Yocto-Projekt einrichten, um Qt und eine Qt-Demo-Anwendung auf einen Raspberry Pi 4 zu installieren und wie Sie diese Qt-Demo-Anwendung dann automatisch starten können.

Auf dieser Seite bieten wir Download-Links für Skripte zum automatischen Einrichten der Cross-Kompilierung auf Linux-Host und Raspberry Pi 4 und eine Beschreibung, wie man sie verwendet.
Qt Modbus mit TCP/IP-Verbindung
In diesem Blog möchte ich eine kleine Qt-Quick-Anwendung (qml) als Beispiel für eine Modbus-Verbindung über TCP/IP zur Verfügung stellen.
In den Qt-Beispielen habe ich zu Modbus-Verbindungen nur QWidget-Beispiele gefunden und nachdem ich vor Kurzem eine Qt-Quick-Anwendung dazu erstellt habe, möchte ich eine abgespeckte Version davon als Beispiel zur Verfügung stellen.
Raspberry Pi 4 Autostart Qt-Anwendung beim Booten
Wenn man eine Qt-Anwendung - oder auch jede andere Anwendung - für den Raspberry Pi 4 erstellt hat, möchte man nach Fertigstellung der Anwendung sehr oft, daß nach einem Neustart des Raspberry sofort die Anwendung aufgrufen wird.
Häufig wird dies mit Start-Scripts, die an verschiedensten Stellen eingetragen werden können, versucht.
Vernünftiger ist es jedoch, dies über systemd einzurichten.
Windows .exe in Qt-Anwendung ausführen
Die Aufgabe war es, eine Qt Quick Anwendung (GUI) zum Upload neuer Firmware auf einen Touch-Controller zu schreiben.
Die Upload-Software wurde vom Hersteller in einer .exe-Anwendung bereitgestellt, die ein .bin-File auf den Touch-Controller lädt.
Verwenden wollte ich dafür die Qt-Classes "QProcess", mit der man Shell-Anwendungen aufrufen und steuern kann. Auf Linux-Seite hatte ich das schon des Öfteren erfolgreich verwendet - aber auf Windows wollte es zuerst nicht klappen.