HMI
Qt op de Raspberry Pi 4

Voor de ontwikkeling van grafische oppervlakken wordt vaakQt gebruikt. Qt bevat C++ - bibliotheken voor het maken van grafische gebruikersinterfaces die op verschillende besturingssystemen kunnen worden samengesteld.
Aangezien compileren veel rekenkracht vereist, is het raadzaam om de ontwikkeling en compilatie uit te voeren op een hostcomputer in het geval van relatief slecht presterende processors en pas dan de voltooide applicatie op de doelcomputer te laden.
Er bestaan veel instructies op het internet voor het ontwikkelen van een Qt-applicatie voor Raspberry Pi 3- en Pi 4-modellen. Helaas kon ik er geen vinden die perfect werkte voor de Raspberry Pi 4. Deze handleiding is gebaseerd op https://www.kampis-elektroecke.de/raspberry-pi/qt/, met enkele aanpassingen op sommige plaatsen, zodat het bij mij werkte.
Bij Qt wordt versie 5.14.1 gebruikt en voor cross-compilatie gebruik ik een Ubuntu 18 LTS als hostcomputer, die in een vmware is geïnstalleerd.

Raspberry Pi 4 voorbereiden

Voor de basisinstallatie hebben we een Raspbian-besturingssysteem nodig op de Pi 4. Ik gebruikte de "2020-02-13-raspbian-buster-lite.img". Downloads en instructies voor het maken van een SD-kaart zijn te vinden op https://www.raspberrypi.org/downloads/raspbian/. Na het inschakelen van de Pi 4 verschijnt het configuratiemenu, waar men verschillende instellingen kan maken (bijv. hostnaam, IP-adres etc.). Voor onze configuratie hebben we "SSH" en "GL (Fake KMS)" nodig. Zie de volgende twee screenshots.

SSH Konfiguration

FKMS Konfiguration

  • Voer vervolgens de broncodes in /etc/apt/sources.list in. Voeg de volgende regel toe:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
  • Werk vervolgens het systeem bij met de volgende opdrachten:
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
  • En installeer vervolgens de vereiste Qt- en ontwikkelingspakketten:
sudo apt-get build-dep qt5-qmake
sudo apt-get build-dep libqt5gui5
sudo apt-get build-dep libqt5webengine-data
sudo apt-get build-dep libqt5webkit5
sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 gdbserver

Belangrijk: geen symlinks maken of wijzigen voor EGL- und GLES-Libraries zoals in sommige instructies beschreven wordt. - Maak vervolgens een directory voor RaspberryQt:

sudo mkdir /usr/local/RaspberryQt
sudo chown -R pi:pi /usr/local/RaspberryQt

Ubuntu voorbereiden

  • Update software en installeer extra pakketten:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gcc git bison python gperf pkg-config gdb-multiarch
  • Genereer ssh-sleutel voor Raspberry en installeer deze op Raspberry:
ssh-keygen -t rsa -C [email protected] -P "" -f ~/.ssh/rpi_root_id_rsa
ssh-keygen -t rsa -C [email protected] -P "" -f ~/.ssh/rpi_pi_id_rsa
cat ~/.ssh/rpi_root_id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys && chmod 640 .ssh/authorized_keys'
cat ~/.ssh/rpi_pi_id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys && chmod 640 .ssh/authorized_keys'
  • gcc-Compiler, Qt en symlink-Script downloaden:
mkdir /opt/RaspberryQt
cd /opt/RaspberryQt
wget http://download.qt.io/archive/qt/5.14/5.14.1/single/qt-everywhere-src-5.14.1.tar.xz
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
  • De bestanden zijn de cross-compiler voor de Raspberry Pi, de gebruikte Qt-versie (hier 5.14.1) en een Python-script om symbolische links van bestanden te vervangen door relatieve links (zal later nodig zijn).
  • Download de gcc-compiler "rpi-gcc-8.3.0_linux.tar.xz" op https://bugfreeblog.page.link/rasplinuxgcc830 en pak het uit in de map tools
  • Vervolgens wordt de Qt-versie uitgepakt en de naam van de gebruikte Compilers (hier arm-linux-gnueabihf) in het configuratiebestand van Qt aangepast.
tar xf qt-everywhere-src-5.14.1.tar.xz
cp -R qt-everywhere-src-5.14.1/qtbase/mkspecs/linux-arm-gnueabi-g++ qt-everywhere-src-5.14.1/qtbase/mkspecs/linux-arm-gnueabihf-g++
sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' qt-everywhere-src-5.14.1/qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.conf
  • Maak werkmappen:
sudo mkdir /opt/RaspberryQt
sudo mkdir /opt/RaspberryQt/build
sudo mkdir /opt/RaspberryQt/sysroot
sudo mkdir /opt/RaspberryQt/sysroot/usr
sudo mkdir /opt/RaspberryQt/sysroot/opt
sudo chown -R 1000:1000 /opt/RaspberryQt
  • Nu zijn de bibliotheken die worden gebruikt door het doel (hier de Raspberry Pi) Pi nodig. Deze kunnen met rsync van de Raspberry Pi worden gedownload.
rsync -avz [email protected]:/lib sysroot
rsync -avz [email protected]:/usr/include sysroot/usr
rsync -avz [email protected]:/usr/lib sysroot/usr
rsync -avz [email protected]:/opt/vc sysroot/opt
  • Voordat de bestanden kunnen worden gebruikt, moeten de symbolische links die nog steeds naar het bestandssysteem van de Raspberry Pi verwijzen, worden vervangen door relatieve links vanuit de nieuwe sysroot-directory. Dit wordt uitgevoerd met behulp van het gedownloade Python-script:
sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
  • Ten slotte wordt Qt geconfigureerd:
cd /opt/RaspberryQt/build
../qt-everywhere-src-5.14.1/configure -release -opengl es2  -eglfs -device linux-rasp-pi4-v3d-g++ -device-option CROSS_COMPILE=/opt/RaspberryQt/tools/rpi-gcc-8.3.0/bin/arm-linux-gnueabihf- -sysroot /opt/RaspberryQt/sysroot -prefix /usr/local/RaspberryQt -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -nomake tests -nomake examples -make libs -pkg-config -no-use-gold-linker -v -recheck
make -j4
make install
  • De voltooide gecompileerde Qt-bibliotheken worden vervolgens met rsync naar de Raspberry Pi gekopieerd:
cd /opt/RaspberryQt
rsync -avz sysroot/usr/local/RaspberryQt [email protected]:/usr/local

Qt Creator installeren

De beste manier om Qt-applicaties te ontwikkelen is door Qt Creator te gebruiken. Voor de installatie kunt u de online installatiebestanden van de Qt website downloaden en uitvoeren.

Bijgewerkte versie

Er zijn updates op dit blogartikel in een serie van 3 blogartikelen: