HMI
Qt på Raspberry Pi 4

Det bruges ofte til udvikling af grafiske overflader Qt. Qt indeholder C++ - biblioteker til oprettelse af grafiske brugergrænseflader, der kan kompileres på forskellige operativsystemer. Da kompilering kræver meget computerkraft, tilrådes det at udføre udvikling og kompilering på en værtscomputer til processorer med relativ lav ydeevne, og først derefter at indlæse den færdige applikation på målcomputeren.
Der er mange instruktioner på Internettet om udvikling af en Qt-applikation til Raspberry Pi 3 og Pi 4 modeller. Desværre kunne jeg ikke finde en der fungerede fejlfrit for Raspberry Pi 4. Denne vejledning er baseret på https://www.kampis-elektroecke.de/raspberry-pi/qt/ og jeg ændrede det nogle steder, så det fungerede for mig.
Version 5.14.1 bruges til Qt, og jeg bruger en Ubuntu 18 LTS som værtscomputer til krydskompilering, som er installeret i en vmware.

Forbered Raspberry Pi 4

Til den grundlæggende installation har vi brug for et Raspbian-operativsystem på Pi 4. Jeg brugte "2020-02-13-raspbian-buster-lite.img". Downloads og instruktioner til, hvordan man opretter et SD-kort, findes på https://www.raspberrypi.org/downloads/raspbian/. Efter aktivering af Pi 4 vises konfigurationsmenuen, hvor du kan foretage forskellige indstillinger (f.eks. hostname, IP-adresse osv.). Til vores konfiguration har vi brug for "SSH" og "GL (Fake KMS)". Se de følgende to skærmbilleder.

SSH Konfiguration

FKMS Konfiguration

  • Indtast derefter development sources i /etc/apt/sources.list. Tilføj følgende linje:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
  • Opdater derefter systemet med følgende kommandoer:
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
  • Og installer derefter de krævede Qt- og udviklingspakker:
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

Vigtigt: Ikke som beskrevet i nogle Instruktioner, opret eller ændr symlinks til EGL- og GLES-biblioteker. - Opret derefter et bibliotek til RaspberryQt:

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

Forbered Ubuntu

  • Opdater software og installer yderligere pakker:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gcc git bison python gperf pkg-config gdb-multiarch
  • Generer ssh-nøgle til Raspberry og installer den på 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'
  • Download gcc-compiler, Qt og symlink-script:
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
  • Filerne er Cross-Compiler til Raspberry Pi, den anvendte Qt-version (her 5.14.1) og et Python-script til symboliske links at udskifte filer med relative links (bliver nødvendigt senere).
  • Download gcc-Compliler "rpi-gcc-8.3.0_linux.tar.xz" fra https://bugfreeblog.page.link/rasplinuxgcc830 og ekstraher den til værktøjskatalogen
  • Derefter ekstraheres Qt-versionen og tilpas navnet på de brugte compilers (her arm-linux-gnueabihf) i konfigurationsfilen til Qt.
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
  • Opret fungerende mapper:
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 er bibliotekerne, der er brugt af målet (her Raspberry Pi) Pi, krævet. Disse kan downloades fra Raspberry Pi ved hjælp af rsync.
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
  • Før filerne kan bruges, skal de symbolske links, der stadig peger på filsystemet i Raspberry Pi, erstattes af relative links fra det nye sysroot-bibliotek. Dette gøres ved hjælp af det downloadede Python-script:
sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
  • Endelig er Qt konfigureret:
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 kompilerede Qt-biblioteker kopieres derefter til Raspberry Pi ved hjælp af rsync:
cd /opt/RaspberryQt
rsync -avz sysroot/usr/local/RaspberryQt [email protected]:/usr/local

Installer Qt Creator

Den bedste måde at udvikle Qt-applikationer på er at bruge Qt Creator. For at installere, så download og kør de online installationsfiler fra Qt-websted.

Updated version

Updates to this blog post have been provided in a series of 3 blog posts: