Introduzione
Questa è una guida per la compilazione incrociata di Qt 5.15.2 per Raspberry Pi 4 e l'installazione sul Compute Module 4. È un aggiornamento al mio post sul blog Qt sul Raspberry Pi 4, con la differenza che questa volta sto usando Raspberry Pi OS Lite (scarica qui: https://www.raspberrypi.org/software/operating-systems/), Qt versione 5.15.2 e Ubuntu 20 LTS come computer di compilazione incrociata in una macchina virtuale.
Fonti
Oltre al mio vecchio post sul blog (vedi sopra), ho anche usato le seguenti fonti:
- di Uvindu Wijesinghe: https://github.com/UvinduW/Cross-Compiling-Qt-for-Raspberry-Pi-4
Attenzione
È disponibile un aggiornamento di questo articolo, che contiene la compilazione incrociata per Raspberry Pi, Qt6 e Ubuntu 22.04 LTS. Seguite questo link, se avete bisogno di versioni più recenti.
Raspberry Pi OS Lite
Installare Raspberry Pi OS Lite su un Raspberry Pi 4 o su un Raspberry Compute Module 4 come descritto nel mio post sul blog Installazione di Raspberry Pi OS su Raspberry Compute Module 4 .
Qt 5.15.2 su Ubuntu 20 LTS
Dopo che il sistema operativo Raspberry Pi è installato sul modulo di calcolo e il Raspberry si avvia dalla memoria eMMC, è il momento di installare il software richiesto sul Raspberry e sulla macchina Ubuntu.
Modulo di elaborazione Raspberry 4
I passaggi mostrati di seguito dovrebbero funzionare anche su un "normale" Raspberry Pi 4.
Dopo aver acceso Pi 4, apri il menu di configurazione.
sudo raspi-config
Per la nostra configurazione abbiamo bisogno di "SSH" e "GL (Fake KMS)". Guarda i seguenti due screenshot.- Quindi aggiungere i sorgenti di sviluppo a /etc/apt/sources.list. A tale scopo, aggiungere la seguente riga:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- Quindi aggiornare il sistema con i seguenti comandi:sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- E quindi installare i pacchetti Qt e di sviluppo richiesti: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
- Quindi creare una directory per RaspberryQt:sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15
Macchina Ubuntu
È richiesto un PC o una macchina virtuale con Ubuntu 20 LTS installato.
Prima di tutto, aggiorna Ubuntu e installa alcune librerie richieste:
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
Quindi - se non già disponibile - crea una chiave ssh e installala sul Raspberry, in modo che non appaia una richiesta di password con ogni rsync e debbano essere inseriti nome utente e password. Ci sono abbastanza istruzioni su Internet, quindi mi risparmierò la descrizione dettagliata qui.
Creare una struttura di directory per le librerie Raspberry
Per i file richiesti, creo la seguente struttura di directory in 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
Scarica le risorse Qt
Scarichiamo le risorse Qt e le scompriamo nella directory 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
Ora dobbiamo modificare un po 'il file mkspec in modo da poterlo usare con il nostro compilatore. A tale scopo, eseguire i seguenti comandi:
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
Scarica Cross-Compiler
Come cross-compiler uso una versione Linaro 7.4.1. Per fare ciò, passare alla directory degli strumenti e scaricare e decomprimere il compilatore:
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 delle librerie Raspberry
Ora abbiamo bisogno delle librerie originali dal Raspberry Pi, che copiamo nelle directory di Ubuntu con 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/
Ora dobbiamo ripulire i collegamenti simbolici che sono stati copiati da rsync in modo che puntino ai file originali corretti. C'è un piccolo script Python da scaricare:
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
Quindi rendere eseguibile lo script e chiamarlo:
sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
Compilazione di Qt
Ora possiamo configurare la build e quindi compilarla.
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
Dopo alcuni minuti, lo script dovrebbe essere terminato e le seguenti condizioni EGLFS dovrebbero essere impostate o meno.
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
In caso contrario o se vengono visualizzati altri messaggi di errore, indagare e ripulire. Se si desidera eseguire nuovamente lo script di configurazione con variabili modificate, eliminare preventivamente il contenuto della directory di compilazione.
Se tutto è OK, esegui i comandi make e make install.
make -j4
make install
Installare i file compilati sul Raspberry
Se la compilazione ha esito positivo, i file compilati - si trovano nella directory qt5.15 - possono essere copiati sul Raspberry Pi. Ancora una volta, lo facciamo usando il comando rsync.
rsync -avz --rsync-path="sudo rsync" qt5.15 pi@192.168.1.7:/usr/local/
Configurazione QtCreator
Nel prossimo post del blog spiegherò come usare QtCreator per l'uso con le librerie compilate.