Qt 5.15 krysskompilering for Raspberry Compute Module 4 på Ubuntu 20 LTS

Introduksjon

Dette er en veiledning for krysskompilering av Qt 5.15.2 for Raspberry Pi 4 og installasjon på Compute Module 4. Det er en oppdatering til blogginnlegget mitt Qt på Raspberry Pi 4, med den forskjellen at denne gangen bruker jeg Raspberry Pi OS Lite (last ned her: https://www.raspberrypi.org/software/operating-systems/), Qt versjon 5.15.2 og Ubuntu 20 LTS som en krysskompileringsdatamaskin i en virtuell maskin.

Kilder

I tillegg til mitt gamle blogginnlegg (se ovenfor), brukte jeg også følgende kilder:

Raspberry Pi OS Lite

Installer Raspberry Pi OS Lite på en Raspberry Pi 4 eller på en Raspberry Compute Module 4 som beskrevet i blogginnlegget mitt Installere Raspberry Pi OS på Raspberry Compute Module 4 .

Qt 5.15.2 på Ubuntu 20 LTS

Etter at Raspberry Pi OS er installert på Compute Module og Raspberry støvler tilbake fra eMMC-minnet, er det på tide å installere den nødvendige programvaren på Raspberry og på Ubuntu-maskinen.

Raspberry Compute Modul 4

Trinnene vist nedenfor skal også fungere på en "normal" Raspberry Pi 4.

Etter å ha slått på Pi 4, åpne konfigurasjonsmenyen.

sudo raspi-config
For konfigurasjonen vår trenger vi "SSH" og "GL (Fake KMS)". Se følgende to skjermbilder.
SSH Konfiguration

FKMS Konfiguration

- Legg deretter utviklingskilder til /etc/apt/sources.list. For å gjøre dette, legg til følgende linje:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- Oppdater deretter systemet med følgende kommandoer:
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- Og installer deretter de nødvendige Qt- og utviklingspakkene:
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
- Deretter oppretter du en katalog for RaspberryQt:
sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15

Ubuntu Maskin

En PC eller virtuell maskin med Ubuntu 20 LTS installert er nødvendig.
Først av alt, ta Ubuntu oppdatert og installer noen 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

Deretter - hvis den ikke allerede er tilgjengelig - opprett en ssh-nøkkel og installer den på bringebæren, slik at en passordprompt ikke vises med hver rsync og brukernavn og passord må skrives inn. Det er nok instruksjoner på Internett, så jeg vil spare meg den detaljerte beskrivelsen her.

Opprett katalogstruktur for Raspberry-bibliotekene

For de nødvendige filene, oppretter jeg følgende 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

Last ned Qt-ressurser

Vi laster ned Qt-ressursene og pakker dem ut 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

Nå må vi endre mkspec-filen litt slik at vi kan bruke den med kompilatoren vår. For å gjøre dette, kjør 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

Last ned Cross-Compiler

Som en kryss-kompilator, bruker jeg en Linaro versjon 7.4.1. For å gjøre dette, bytt til verktøykatalogen og last ned og pakk ut kompilatoren:

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 bringebærbiblioteker

Nå trenger vi de originale bibliotekene fra Raspberry Pi, som vi kopierer til Ubuntu-katalogene 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/

Nå må vi rydde opp i de symbolske lenkene som ble kopiert av rsync, slik at de peker til de riktige originalfilene. Det er et lite Python-skript for nedlasting:

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

Gjør deretter skriptet kjørbart og kall det:

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

Kompilering Qt

Nå kan vi konfigurere bygningen og deretter kompilere 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

Etter noen minutter skal skriptet være ferdig, og følgende EGLFS-betingelser skal settes eller ikke angis.

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 tilfelle, eller hvis det vises andre feilmeldinger, må du undersøke og rydde opp. Hvis du vil kjøre konfigurasjonsskriptet igjen med endrede variabler, må du slette innholdet i byggekatalogen på forhånd.
Hvis alt er OK, kjør deretter kommandoene make og make install.

make -j4
make install

Installer kompilerte filer på bringebær

Hvis samlingen er vellykket, kan de kompilerte filene - de ligger i qt5.15-katalogen - kopieres til Raspberry Pi. Igjen, vi gjør dette ved hjelp av rsync-kommandoen.

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

Konfigurasjon QtCreator

I neste blogginnlegg vil jeg forklare hvordan du bruker QtCreator til bruk med de kompilerte bibliotekene.