Zavedenie
Toto je návod na krížovú kompiláciu Qt 5.15.2 pre Raspberry Pi 4 a jeho inštaláciu na Compute Module 4. Je to aktualizácia môjho blogového príspevku Qt na Raspberry Pi 4, s tým rozdielom, že tentoraz používam Raspberry Pi OS Lite (stiahnite si tu: https://www.raspberrypi.org/software/operating-systems/), Qt verziu 5.15.2 a Ubuntu 20 LTS ako krížový kompilačný počítač vo virtuálnom stroji.
Zdroje
Okrem môjho starého blogového príspevku (pozri vyššie) som použil aj nasledujúce zdroje:
- autor: Uvindu Wijesinghe: https://github.com/UvinduW/Cross-Compiling-Qt-for-Raspberry-Pi-4
Pozor
V tomto článku je aktualizácia, ktorá obsahuje krížovú kompiláciu pre Raspberry Pi, Qt6 a Ubuntu 22.04 LTS. Ak potrebujete novšie verzie, postupujte podľa tohto odkazu.
Raspberry Pi OS Lite
Nainštalujte Raspberry Pi OS Lite na Raspberry Pi 4 alebo na Raspberry Compute Module 4, ako je popísané v mojom blogovom príspevku Inštalácia Raspberry Pi OS na Raspberry Compute Module 4 .
Qt 5.15.2 na Ubuntu 20 LTS
Po nainštalovaní operačného systému Raspberry Pi na výpočtový modul a zavádzaní Raspberry späť z pamäte eMMC je čas nainštalovať požadovaný softvér na Raspberry a na stroj Ubuntu.
Raspberry Compute Module 4
Kroky uvedené nižšie by mali fungovať aj na "normálnom" Raspberry Pi 4.
Po zapnutí Pi 4 otvorte ponuku konfigurácie.
sudo raspi-config
Pre našu konfiguráciu potrebujeme "SSH" a "GL (Fake KMS)". Pozrite si nasledujúce dve snímky obrazovky.- Potom pridajte vývojové zdroje do /etc/apt/sources.list. Ak to chcete urobiť, pridajte nasledujúci riadok:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- Potom aktualizujte systém nasledujúcimi príkazmi:sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- A potom nainštalujte požadované Qt a vývojové balíky: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
- Potom vytvorte adresár pre RaspberryQt:sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15
Stroj Ubuntu
Vyžaduje sa počítač alebo virtuálny stroj s nainštalovaným Ubuntu 20 LTS.
Najprv aktualizujte Ubuntu a nainštalujte niektoré požadované knižnice:
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
Potom - ak ešte nie je k dispozícii - vytvorte ssh-kľúč a nainštalujte ho na Raspberry, aby sa výzva na zadanie hesla neobjavila s každým rsync a bolo potrebné zadať užívateľské meno a heslo. Na internete je dostatok pokynov, takže si tu ušetrím podrobný popis.
Vytvorte štruktúru adresárov pre knižnice Raspberry
Pre požadované súbory vytvorím nasledujúcu adresárovú štruktúru pod 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
Stiahnite si zdroje Qt
Stiahneme zdroje Qt a rozbalíme ich v adresári raspberrypi4:
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
Teraz musíme súbor mkspec trochu upraviť, aby sme ho mohli použiť s naším kompilátorom. Ak to chcete urobiť, spustite nasledujúce príkazy:
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
Stiahnite si krížový kompilátor
Ako krížový kompilátor používam Linaro verziu 7.4.1. Ak to chcete urobiť, prejdite do adresára nástrojov a stiahnite a rozbaľte kompilátor:
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 Raspberry Libraries
Teraz potrebujeme pôvodné knižnice z Raspberry Pi, ktoré skopírujeme do adresárov Ubuntu pomocou 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/
Teraz musíme vyčistiť symbolické odkazy, ktoré skopíroval rsync tak, aby smerovali na správne pôvodné súbory. Existuje malý skript jazyka Python na stiahnutie:
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
Potom urobte skript spustiteľným a zavolajte ho:
sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
Kompilácia Qt
Teraz môžeme zostavu nakonfigurovať a potom ju skompilovať.
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
Po niekoľkých minútach by mal byť skript dokončený a nasledujúce podmienky EGLFS by mali byť nastavené alebo nenastavené.
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
Ak to tak nie je alebo ak sa zobrazia iné chybové hlásenia, prešetrite a vyčistite. Ak chcete znova spustiť konfiguračný skript so zmenenými premennými, vopred vymažte obsah adresára zostavenia.
Ak je všetko v poriadku, spustite príkazy Make and Install.
make -j4
make install
Nainštalujte kompilované súbory na Raspberry
Ak je kompilácia úspešná, kompilované súbory - nachádzajú sa v adresári qt5.15 - je možné skopírovať do Raspberry Pi. Opäť to robíme pomocou príkazu rsync.
rsync -avz --rsync-path="sudo rsync" qt5.15 pi@192.168.1.7:/usr/local/
Konfigurácia QtCreator
V ďalšom blogovom príspevku vysvetlím, ako používať QtCreator na použitie s kompilovanými knižnicami.