Raspberry konfigurationsskærm

Qt på Raspberry Pi 4

Qt på Raspberry Pi 4

Qt bruges ofte til at udvikle grafiske grænseflader. Qt indeholder C++ biblioteker til at skabe grafiske grænseflader, der kan kompileres på forskellige operativsystemer.
Da denne kompilering kræver en masse computerkraft, er det tilrådeligt for processorer med relativt lidt kraft at udføre udvikling og kompilering på en værtscomputer og kun derefter at indlæse den færdige applikation på målcomputeren.
Der er masser af vejledninger online til udvikling af en Qt-applikation for Raspberry Pi 3 og Pi 4 modeller.

Desværre kunne jeg ikke finde en, der fungerede fejlfrit for Raspberry Pi 4 og vores behov.

Disse instruktioner er stærkt baseret på https://github.com/abhiTronix/raspberry-pi-cross-compilers/blob/master/QT_build_instructions.md og er ændret nogle steder, så det virkede for mig.Version 5.15.2 bruges til Qt, og jeg bruger en Ubuntu 20.0.4 LTS, der er installeret i vmware som hostcomputer til krydskompilering.

Forudsætninger

Hardware

Vært [PC/Laptop]: En hvilken som helst x86/x86_64 AMD/Intel machine
Mål [Raspberry Pi 4]: Raspberry Pi 4

Software

Vært: En hvilken som helst Linux machine (Ubuntu 20.04 LTS Tested)
Mål: Raspberry Pi 4 Linux 32-bit OS (Raspbian Bullseye Lite testet)

Bemærkning

I baggrunden bruges Cross Compiler Tool Chains til Raspberry Pi fra abhiTronix.

Andet

Lagrings- og tidskrav: Buildbiblioteket tager omkring ~10GB plads og omkring 2-5 timer at fuldføre (baseret på afhængigheder og hostmaskinens specifikationer).
Netværk: Din målmaskine (Raspberry Pi) og værtsmaskine (hvor du krydskompilerer) SKAL begge have internetadgang og SKAL være på SAMME netværk for at følge disse instruktioner.

Forberedelse af Raspberry Pi 4

Til den grundlæggende installation har vi brug for et Raspberry Pi OS Lite operativsystem på Pi 4. Jeg brugte "2022-04-04-raspios-bullseye-armhf-lite.img.xz".

Downloads og instruktioner i, hvordan du opretter et SD-kort med dette, kan findes på https://www.raspberrypi.org/downloads/raspbian/.Når Pi 4 er slået til, vises konfigurationsmenuen, hvor du kan foretage forskellige indstillinger (f.eks. hostnavn, IP-adresse, bruger osv.). Til vores konfiguration skal "SSH" aktiveres.

Installer og opdater softwarepakker

  • Tilføj udviklingskilder i /etc/apt/sources.list med følgende kommando:
sudo sed -i -e 's/\#deb-src/deb-src/g' /etc/apt/sources.list
  • Opdater derefter systemet med følgende kommandoer:
sudo apt-get update
sudo apt-get -y dist-upgrade
echo "$USER ALL=NOPASSWD:$(which rsync)" | sudo tee --append /etc/sudoers
  • Og installer derefter de nødvendige Qt- og udviklingspakker:
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
  • Installer yderligere pakker (afhængigt af dine behov):
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
  • Opret herefter også en mappe til RaspberryQt:
sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15

Opsætning af vigtige symlinks

Download symlinker-værktøj, og juster symlinks.

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

Forbereder Ubuntu

Opdater software og installer yderligere pakker:

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

Forbered byggemiljøet

  • Opret mapper:
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
  • Download og udtræk Qt-kilder:
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
  • Patch QT-kilder.
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
  • Download og udpak kompileren:
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-filer fra Raspberry: Brug dine værdier fra din Raspberry til variablerne raspberry_ip, raspberry_user og 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
  • Tilret symbolske links:
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
  • Konfigurer Qt build:
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
  • Build Qt:
make -j$(nproc)
make install
  • rsync Qt binære filer til raspberry:
sshpass -p "$raspberry_pwd" rsync -avz --rsync-path="sudo rsync" ~/rpi-qt/qt5.15 "$raspberry_user"@"$raspberry_ip":/usr/local

Sidste trin på målmaskinen (Raspberry Pi)

  • Opdater linker på Raspberry Pi

Indtast følgende kommando på Raspberry Pi for at opdatere enheden ved at lade linker finde de nye QT binære filer:

echo /usr/local/qt5.15/lib | sudo tee /etc/ld.so.conf.d/qt5.15.conf
sudo ldconfig

Installation af Qt Creator

Den bedste måde at udvikle Qt-applikationer på er at bruge Qt Creator. For at installere det, skal du downloade og køre de online installationsfiler fra Qt-hjemmesiden.

Indstil Qt Creator til krydskompilering

Læs bloggen Konfiguration af Qt-Creator på Ubuntu 20 Lts til krydskompilering for at inkludere de kompilerede binære filer (mappe '~/rpi-qt/qt5.15') i Qt Creator.

Forslag eller fejl

Hvis du har forslag til forbedringer, eller du finder nogle fejl, så tøv ikke med at bruge kontaktformularen nederst på denne side og giv os besked.

Ophavsretslicens

Copyright © 2022 Interelectronix e.K.
Denne projektkildekode er licenseret under GPL-3.0-licensen.

Hun er måske også interesseret

Installer Raspberry Pi OS på Raspberry Compute Module 4

Dette er en guide til konfiguration af Qt Creator til at bruge kryds-kompilerede Qt-biblioteker til Raspberry Pi 4 og til at oprette applikationer til Raspberry.

Qt 5.15 krydskompilering til Raspberry Compute Module 4 på Ubuntu 20 LTS

Dette er en guide til krydskompilering af Qt 5.15.2 til Raspberry Pi 4 og installation af den på Compute Module 4. Det er en opdatering på mit blogindlæg Qt på Raspberry Pi 4med den forskel, at jeg denne gang bruger Raspberry Pi OS Lite.

Konfigurer Qt-Creator på Ubuntu 20 LTS til krydskompilering

Dette er en guide til konfiguration af Qt Creator til at bruge kryds-kompilerede Qt-biblioteker til Raspberry Pi 4 og til at oprette applikationer til Raspberry.

Yocto local.conf

I denne vejledning giver vi dig oplysninger om, hvordan du opsætter et Yocto-projekt til at installere Qt og en Qt-demo-applikation til en Raspberry Pi 4 og derefter autostarter denne Qt-demo-applikation.

Qt-krydskompileringscripts til Raspberry Pi 4

På denne side giver vi download-links til scripts til automatisk oprettelse af krydskompilering på linux host og Raspberry Pi 4 samt en beskrivelse af, hvordan man bruger dem.

Qt Modbus med TCP/IP-forbindelse

I denne blog vil jeg gerne give et lille Qt-Quick-program (qml) som et eksempel på en Modbus-forbindelse via TCP/IP. I Qt-eksemplerne fandt jeg kun QWidget-eksempler til Modbus-forbindelser, og efter at jeg for nylig oprettede en Qt Quick-applikation til dette formål, vil jeg gerne give en nedskaleret version af den som et eksempel.

Raspberry Pi 4 autostart Qt-applikation ved boot

Hvis du har oprettet et Qt-program - eller et andet program - til Raspberry Pi 4, vil du ofte gerne have, at applikationen bliver hentet umiddelbart efter genstart af Raspberry Pi 4. Dette forsøges ofte med start-scripts, der kan indtastes forskellige steder. Det er dog mere fornuftigt at oprette dette over systemd.

Kør Windows .exe i Qt-applikation

Opgaven var at skrive et Qt Quick-program (GUI) for at uploade ny firmware til en touchcontroller. Producenten stillede upload-softwaren tilrådighed i en .exe-applikation, som indlæses i en .bin-fil på touchcontroller. Jeg ønskede at bruge Qt-klasserne "QProcess", som man kan hente og kontrollere shell-applikationer med. På Linux-siden havde jeg allerede brugt dette med succes flere gange - men på Windows fungerede det ikke i første omgang.