Qt 5.15 compilare încrucișată pentru Raspberry Compute Module 4 pe Ubuntu 20 LTS

Introducere

Acesta este un ghid pentru compilarea încrucișată Qt 5.15.2 pentru Raspberry Pi 4 și instalarea acestuia pe Compute Module 4. Este o actualizare a postării mele de blog Qt pe Raspberry Pi 4, cu diferența că de data aceasta folosesc Raspberry Pi OS Lite (descărcați aici: https://www.raspberrypi.org/software/operating-systems/), Qt versiunea 5.15.2 și Ubuntu 20 LTS ca computer cross-compile într-o mașină virtuală.

Surse

În plus față de vechea mea postare pe blog (vezi mai sus), am folosit și următoarele surse:

Zmeura Pi OS Lite

Instalați Raspberry Pi OS Lite pe un Raspberry Pi 4 sau pe un Raspberry Compute Module 4 așa cum este descris în postarea mea pe blog Instalarea sistemului de operare Raspberry Pi pe Raspberry Compute Module 4 .

Qt 5.15.2 pe Ubuntu 20 LTS

După ce sistemul de operare Raspberry Pi este instalat pe modulul Compute și boot-urile Raspberry revin din memoria eMMC, este timpul să instalați software-ul necesar pe zmeură și pe mașina Ubuntu.

Zmeură Compute Modulul 4

Pașii de mai jos ar trebui să funcționeze și pe un Raspberry Pi 4 "normal".

După pornirea Pi 4, deschideți meniul de configurare.

sudo raspi-config
Pentru configurația noastră avem nevoie de "SSH" și "GL (Fake KMS)". Vedeți următoarele două capturi de ecran.
SSH Konfiguration

FKMS Konfiguration

- Apoi adăugați surse de dezvoltare la /etc/apt/sources.list. Pentru aceasta, adăugați următoarea linie:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- Apoi actualizați sistemul cu următoarele comenzi:
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- Și apoi instalați Qt-ul necesar și pachetele de dezvoltare:
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
- Apoi creați un director pentru RaspberryQt:
sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15

Mașină Ubuntu

Este necesar un PC sau o mașină virtuală cu Ubuntu 20 LTS instalat.
În primul rând, aduceți Ubuntu la zi și instalați câteva biblioteci necesare:

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

Apoi - dacă nu este deja disponibil - creați o cheie ssh și instalați-o pe zmeură, astfel încât să nu apară un prompt de parolă cu fiecare rsync și trebuie introduse numele de utilizator și parola. Există suficiente instrucțiuni pe Internet, așa că mă voi scuti de descrierea detaliată aici.

Creați structura de directoare pentru bibliotecile Raspberry

Pentru fișierele necesare, creez următoarea structură de directoare sub 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

Descărcați resursele Qt

Descărcăm resursele Qt și le despachetăm în directorul 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

Acum trebuie să modificăm puțin fișierul mkspec, astfel încât să îl putem folosi cu compilatorul nostru. Pentru aceasta, executați următoarele comenzi:

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

Descărcați compilatorul încrucișat

Ca cross-compiler folosesc o versiune Linaro 7.4.1. Pentru a face acest lucru, treceți la directorul de instrumente și descărcați și despachetați compilatorul:

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 al bibliotecilor de zmeură

Acum avem nevoie de bibliotecile originale de la Raspberry Pi, pe care le copiem în directoarele Ubuntu cu 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/

Acum trebuie să curățăm legăturile simbolice care au fost copiate de rsync, astfel încât acestea să indice fișierele originale corecte. Există un mic script Python pentru descărcare:

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

Apoi faceți scriptul executabil și numiți-l:

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

Compilarea Qt

Acum putem configura construirea și apoi o putem compila.

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

După câteva minute, scriptul ar trebui să fie terminat și următoarele condiții EGLFS ar trebui să fie setate sau nu setate.

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

Dacă nu este cazul sau dacă apar alte mesaje de eroare, vă rugăm să investigați și să curățați. Dacă doriți să rulați din nou scriptul de configurare cu variabile modificate, ștergeți în prealabil conținutul directorului de compilare.
Dacă totul este OK, rulați comenzile de instalare și efectuați.

make -j4
make install

Instalați fișiere compilate pe zmeură

Dacă compilația are succes, fișierele compilate - acestea sunt localizate în directorul qt5.15 - pot fi copiate în Raspberry Pi. Din nou, facem acest lucru folosind comanda rsync.

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

Configurare QtCreator

În următoarea postare pe blog voi explica cum să utilizați QtCreator pentru utilizarea cu bibliotecile compilate.