Introductie
Dit is een handleiding voor het cross-compileren van Qt 5.15.2 voor Raspberry Pi 4 en het installeren ervan op de Compute Module 4. Het is een update van mijn blogpost Qt op de Raspberry Pi 4, met het verschil dat ik deze keer Raspberry Pi OS Lite (download hier: https://www.raspberrypi.org/software/operating-systems/), Qt versie 5.15.2 en Ubuntu 20 LTS gebruik als een cross-compile computer in een virtuele machine.
Bronnen
Naast mijn oude blogpost (zie hierboven) heb ik ook de volgende bronnen gebruikt:
- door Uvindu Wijesinghe: https://github.com/UvinduW/Cross-Compiling-Qt-for-Raspberry-Pi-4
Attentie
Er is een update van dit artikel, die kruiscompilatie bevat voor Raspberry Pi, Qt6 en Ubuntu 22.04 LTS. Volg deze link als je nieuwere versies nodig hebt.
Raspberry Pi OS Lite
Installeer Raspberry Pi OS Lite op een Raspberry Pi 4 of op een Raspberry Compute Module 4 zoals beschreven in mijn blogpost Raspberry Pi OS installeren op Raspberry Compute Module 4 .
Qt 5.15.2 op Ubuntu 20 LTS
Nadat het Raspberry Pi OS is geïnstalleerd op de Compute Module en de Raspberry terug opstart vanuit het eMMC-geheugen, is het tijd om de vereiste software op de Raspberry en op de Ubuntu-machine te installeren.
Raspberry Compute Module 4
De onderstaande stappen zouden ook moeten werken op een "normale" Raspberry Pi 4.
Nadat u de Pi 4 hebt ingeschakeld, opent u het configuratiemenu.
sudo raspi-config
Voor onze configuratie hebben we "SSH" en "GL (Fake KMS)" nodig. Zie de volgende twee screenshots.- Voeg vervolgens ontwikkelingsbronnen toe aan /etc/apt/sources.list. Voeg hiervoor de volgende regel toe:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- Update vervolgens het systeem 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
- Maak vervolgens een directory voor RaspberryQt:sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15
Ubuntu Machine
Een pc of virtuele machine waarop Ubuntu 20 LTS is geïnstalleerd, is vereist.
Breng allereerst Ubuntu up-to-date en installeer enkele vereiste bibliotheken:
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
Maak vervolgens - indien nog niet beschikbaar - een ssh-key aan en installeer deze op de Raspberry, zodat er niet bij elke rsync een wachtwoordprompt verschijnt en gebruikersnaam en wachtwoord moeten worden ingevoerd. Er zijn genoeg instructies op internet, dus ik zal mezelf de gedetailleerde beschrijving hier besparen.
Maak een mapstructuur voor de Raspberry-bibliotheken
Voor de vereiste bestanden maak ik de volgende mapstructuur onder Documents/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
Qt-bronnen downloaden
We downloaden de Qt-bronnen en pakken ze uit in de raspberrypi4-map:
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 moeten we het mkspec-bestand een beetje aanpassen, zodat we het met onze compiler kunnen gebruiken. Voer hiervoor de volgende opdrachten uit:
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
Cross-Compiler downloaden
Als cross-compiler gebruik ik een Linaro versie 7.4.1. Ga hiervoor naar de map tools en download en pak de compiler uit:
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 van Raspberry Libraries
Nu hebben we de originele bibliotheken van de Raspberry Pi nodig, die we met rsync naar de Ubuntu-mappen kopiëren:
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 moeten we de symbolische links opruimen die door de rsync zijn gekopieerd, zodat ze naar de juiste originele bestanden verwijzen. Er is een klein Python-script om te downloaden:
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
Maak vervolgens het script uitvoerbaar en noem het:
sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
Qt compileren
Nu kunnen we de build configureren en vervolgens compileren.
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
Na een paar minuten moet het script klaar zijn en moeten de volgende EGLFS-voorwaarden al dan niet zijn ingesteld.
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
Als dit niet het geval is of als er andere foutmeldingen verschijnen, onderzoek het dan en ruim het op. Als u het configuratiescript opnieuw wilt uitvoeren met gewijzigde variabelen, verwijdert u vooraf de inhoud van de build-map.
Als alles in orde is, voert u de opdrachten make and make install uit.
make -j4
make install
Installeer gecompileerde bestanden op de Raspberry
Als de compilatie succesvol is, kunnen de gecompileerde bestanden - ze bevinden zich in de qt5.15-map - naar de Raspberry Pi worden gekopieerd. Nogmaals, we doen dit met behulp van het rsync-commando.
rsync -avz --rsync-path="sudo rsync" qt5.15 pi@192.168.1.7:/usr/local/
Configuratie QtCreator
In de volgende blogpost zal ik uitleggen hoe je QtCreator kunt gebruiken voor gebruik met de gecompileerde bibliotheken.