Indførelsen
Dette er en guide til krydskompilering af Qt 5.15.2 til Raspberry Pi 4 og installation af den på beregningsmodulet 4. Det er en opdatering til mit blogindlæg Qt på Raspberry Pi 4, med den forskel, at jeg denne gang bruger Raspberry Pi OS Lite (download her: https://www.raspberrypi.org/software/operating-systems/), Qt version 5.15.2 og Ubuntu 20 LTS som en cross-kompileringscomputer i en virtuel maskine.
Kilder
Ud over mit gamle blogindlæg (se ovenfor) brugte jeg også følgende kilder:
- af Uvindu Wijesinghe: https://github.com/UvinduW/Cross-Compiling-Qt-for-Raspberry-Pi-4
Opmærksomhed
Der er kommet en opdatering til denne artikel, som indeholder krydskompilering til Raspberry Pi, Qt6 og Ubuntu 22.04 LTS. Følg dette link, hvis du har brug for nyere versioner.
Raspberry Pi OS Lite
Installer Raspberry Pi OS Lite på en Raspberry Pi 4 eller på et Raspberry Compute Module 4 som beskrevet i mit blogindlæg Installation af Raspberry Pi OS på Raspberry Compute Module 4 .
Qt 5.15.2 på Ubuntu 20 LTS
Når Raspberry Pi OS er installeret på computermodulet, og Raspberry starter tilbage fra eMMC-hukommelsen, er det tid til at installere den nødvendige software på Raspberry og på Ubuntu-maskinen.
Raspberry Compute Modul 4
Trinene vist nedenfor skal også fungere på en "normal" Raspberry Pi 4.
Når du har tændt Pi 4, skal du åbne konfigurationsmenuen.
sudo raspi-config
Til vores konfiguration har vi brug for "SSH" og "GL (Fake KMS)". Se følgende to skærmbilleder.- Tilføj derefter udviklingskilder til /etc/apt/sources.list. For at gøre dette skal du tilføje 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 nødvendige 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
- Opret derefter en mappe til RaspberryQt:sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15
Ubuntu maskine
En pc eller virtuel maskine med Ubuntu 20 LTS installeret er påkrævet.
Først og fremmest skal du bringe Ubuntu opdateret og installere nogle nødvendige biblioteker:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gcc git bison python gperf pkg-config gdb-multiarch
sudo apt install build-essential
Opret derefter - hvis den ikke allerede er tilgængelig - en ssh-nøgle og installer den på hindbæret, så der ikke vises en adgangskodeprompt med hver rsync, og brugernavn og adgangskode skal indtastes. Der er nok instruktioner på internettet, så jeg vil spare mig selv den detaljerede beskrivelse her.
Opret mappestruktur til Raspberry biblioteker
For de nødvendige filer opretter jeg følgende mappestruktur under Dokumenter / Qt-CrossCompile-RaspberryPi / raspberrypi4:
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/build
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/tools
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot/usr
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot/opt
sudo chown -R 1000:1000 ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4
cd ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4
Download Qt-ressourcer
Vi downloader Qt-ressourcerne og pakker dem ud i raspberrypi4-mappen:
sudo wget http://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz
sudo tar xfv qt-everywhere-src-5.15.2.tar.xz
Nu skal vi ændre mkspec-filen lidt, så vi kan bruge den med vores compiler. For at gøre dette skal du køre følgende kommandoer:
cp -R qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabi-g++ qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabihf-g++
sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.conf
Download Cross-Compiler
Som cross-compiler bruger jeg en Linaro version 7.4.1. For at gøre dette skal du skifte til værktøjsmappen og downloade og udpakke kompileren:
cd tools
sudo wget https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/arm-linux-gnueabihf/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz
tar xfv gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz
Rsync af Raspberry biblioteker
Nu har vi brug for de originale biblioteker fra Raspberry Pi, som vi kopierer til Ubuntu-mapperne med rsync:
cd ..
rsync -avz --rsync-path="sudo rsync" --delete pi@192.168.1.7:/lib sysroot/
rsync -avz --rsync-path="sudo rsync" --delete pi@192.168.1.7:/usr/include sysroot/usr/
rsync -avz --rsync-path="sudo rsync" --delete pi@192.168.1.7:/usr/lib sysroot/usr/
rsync -avz --rsync-path="sudo rsync" --delete pi@192.168.1.7:/opt/vc sysroot/opt/
Nu skal vi rydde op i de symbolske links, der blev kopieret af rsync, så de peger på de korrekte originale filer. Der er et lille Python-script til download:
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
Gør derefter scriptet eksekverbart og kald det:
sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
Kompilering af Qt
Nu kan vi konfigurere buildet og derefter kompilere det.
cd build
../qt-everywhere-src-5.15.2/configure -release -opengl es2 -eglfs -device linux-rasp-pi4-v3d-g++ -device-option CROSS_COMPILE=~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/tools/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot -prefix /usr/local/qt5.15 -extprefix ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/qt5.15 -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -nomake tests -make libs -pkg-config -no-use-gold-linker -v -recheck
Efter et par minutter skal scriptet være færdigt, og følgende EGLFS-betingelser skal indstilles eller ikke indstilles.
QPA backends:
DirectFB ............................... no
EGLFS .................................. yes [SHOULD BE YES]
EGLFS details:
EGLFS OpenWFD ........................ no
EGLFS i.Mx6 .......................... no
EGLFS i.Mx6 Wayland .................. no
EGLFS RCAR ........................... no
EGLFS EGLDevice ...................... yes [SHOULD BE YES]
EGLFS GBM ............................ yes
EGLFS VSP2 ........................... no
EGLFS Mali ........................... no
EGLFS Raspberry Pi ................... no [SHOULD BE NO]
EGLFS X11 ............................ yes
LinuxFB ................................ yes
VNC .................................... yes
Hvis dette ikke er tilfældet, eller hvis der vises andre fejlmeddelelser, skal du undersøge og rydde op. Hvis du vil køre konfigurationsscriptet igen med ændrede variabler, skal du slette indholdet af build-mappen på forhånd.
Hvis alt er i orden, skal du køre kommandoerne make and make install.
make -j4
make install
Installer kompilerede filer på Raspberry
Hvis kompileringen er vellykket, kan de kompilerede filer - de er placeret i qt5.15-mappen - kopieres til Raspberry Pi. Igen gør vi dette ved hjælp af kommandoen rsync.
rsync -avz --rsync-path="sudo rsync" qt5.15 pi@192.168.1.7:/usr/local/
Konfiguration QtCreator
I det næste blogindlæg vil jeg forklare, hvordan du bruger QtCreator til brug med de kompilerede biblioteker.