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

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:

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.
SSH Konfiguration

FKMS Konfiguration

- 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 [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 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 [email protected]:/usr/local/

Konfiguration QtCreator

I det næste blogindlæg vil jeg forklare, hvordan du bruger QtCreator til brug med de kompilerede biblioteker.