Qt 5.15 korskompilering för Raspberry Compute Module 4 på Ubuntu 20 LTS

Införandet

Detta är en guide för korskompilering Qt 5.15.2 för Raspberry Pi 4 och installera den på beräkningsmodul 4. Det är en uppdatering av mitt blogginlägg Qt på Raspberry Pi 4, med skillnaden att den här gången använder jag Raspberry Pi OS Lite (ladda ner här: https://www.raspberrypi.org/software/operating-systems/), Qt version 5.15.2 och Ubuntu 20 LTS som en korskompileringsdator i en virtuell maskin.

Källor

Förutom mitt gamla blogginlägg (se ovan) använde jag också följande källor:

Hallon Pi OS Lite

Installera Raspberry Pi OS Lite på en Raspberry Pi 4 eller på en Raspberry Compute Module 4 som beskrivs i mitt blogginlägg Installera Raspberry Pi OS på Raspberry Compute Module 4 .

Qt 5.15.2 på Ubuntu 20 LTS

När Raspberry Pi OS har installerats på beräkningsmodulen och Raspberry startar tillbaka från eMMC-minnet är det dags att installera den nödvändiga programvaran på Raspberry och på Ubuntu-maskinen.

Hallon Compute Modul 4

Stegen nedan bör också fungera på en "normal" Raspberry Pi 4.

När du har slagit på Pi 4 öppnar du konfigurationsmenyn.

sudo raspi-config
För vår konfiguration behöver vi "SSH" och "GL (Fake KMS)". Se följande två skärmbilder.
SSH Konfiguration

FKMS Konfiguration

- Lägg sedan till utvecklingskällor till /etc/apt/sources.list. För att göra detta, lägg till följande rad:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- Uppdatera sedan systemet med följande kommandon:
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- Och installera sedan de nödvändiga Qt- och utvecklingspaketen:
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
- Skapa sedan en katalog för RaspberryQt:
sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15

Ubuntu maskin

En dator eller virtuell maskin med Ubuntu 20 LTS installerat krävs.
Först och främst, uppdatera Ubuntu och installera några nödvändiga bibliotek:

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

Sedan - om det inte redan är tillgängligt - skapa en ssh-nyckel och installera den på Raspberry, så att en lösenordsprompt inte visas med varje rsync och användarnamn och lösenord måste anges. Det finns tillräckligt med instruktioner på Internet, så jag sparar mig den detaljerade beskrivningen här.

Skapa katalogstruktur för Raspberry-biblioteken

För de nödvändiga filerna skapar jag följande katalogstruktur under 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

Ladda ner Qt-resurser

Vi laddar ner Qt-resurserna och packar upp dem i raspberrypi4-katalogen:

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 måste vi ändra mkspec-filen lite så att vi kan använda den med vår kompilator. Det gör du genom att köra följande kommandon:

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

Ladda ner Cross-Compiler

Som korskompilator använder jag en Linaro version 7.4.1. För att göra detta, byt till verktygskatalogen och ladda ner och packa upp kompilatorn:

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 av hallonbibliotek

Nu behöver vi de ursprungliga biblioteken från Raspberry Pi, som vi kopierar till Ubuntu-katalogerna med rsync:

cd ..
rsync -avz --rsync-path="sudo rsync" --delete [email protected]:/lib sysroot/
rsync -avz --rsync-path="sudo rsync" --delete [email protected]:/usr/include sysroot/usr/
rsync -avz --rsync-path="sudo rsync" --delete [email protected]:/usr/lib sysroot/usr/
rsync -avz --rsync-path="sudo rsync" --delete [email protected]:/opt/vc sysroot/opt/

Nu måste vi rensa upp de symboliska länkarna som kopierades av rsync så att de pekar på rätt originalfiler. Det finns ett litet Python-skript för nedladdning:

wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py

Gör sedan skriptet körbart och anropa det:

sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot

Kompilera Qt

Nu kan vi konfigurera byggnaden och sedan kompilera den.

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 några minuter bör skriptet vara klart och följande EGLFS-villkor bör ställas in eller inte ställas in.

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

Om så inte är fallet eller om andra felmeddelanden visas, vänligen undersök och rensa upp. Om du vill köra konfigurationsskriptet igen med ändrade variabler tar du bort innehållet i build-katalogen i förväg.
Om allt är OK, kör sedan kommandona make and make install.

make -j4
make install

Installera kompilerade filer på Raspberry

Om sammanställningen lyckas kan de kompilerade filerna - de finns i qt5.15-katalogen - kopieras till Raspberry Pi. Återigen gör vi detta med kommandot rsync.

rsync -avz --rsync-path="sudo rsync" qt5.15 [email protected]:/usr/local/

Konfiguration QtCreator

I nästa blogginlägg kommer jag att förklara hur man använder QtCreator för användning med de kompilerade biblioteken.