Qt 5.15 cross compile za Malina Računalniški modul 4 na Ubuntu 20 LTS

Uvod

To je vodnik za navzkrižno pripravo Qt 5.15.2 za Raspberry Pi 4 in ga namestite na Compute Module 4. To je posodobitev moj blog post Qt na Raspberry Pi 4, z razliko, da tokrat uporabljam Raspberry Pi OS Lite (download tukaj: https://www.raspberrypi.org/software/operating-systems/), Qt različica 5.15.2 in Ubuntu 20 LTS kot navzkrižno kompajlira računalnik v virtualni stroj.

Viri
Poleg moje stare objave na blogu (glej zgoraj), sem uporabil tudi naslednje vire:

Malina Pi OS Lite

Namestite Malina Pi OS Lite na Malina Pi 4 ali na Malina Compute Module 4, kot je opisano v mojem blogu post Namestitev Malina Pi OS na Malina Compute Module 4 .

Qt 5.15.2 na Ubuntu 20 LTS

Ko je Raspberry Pi OS nameščen na Compute Module in Malina škornji nazaj iz eMMC pomnilnika, je čas, da namestite zahtevano programsko opremo na Malina in na Ubuntu stroj.

Malina Računalniški modul 4

Spodaj prikazani koraki bi morali delati tudi na "normalno" Malina Pi 4.

Ko vklopite pi 4, odprite konfiguracijski meni.

sudo raspi-config
Za našo konfiguracijo potrebujemo "SSH" in "GL (Fake KMS)". Oglejte si naslednja dva posnetka zaslona.
SSH Konfiguration

FKMS Konfiguration

- Nato dodajte razvojne vire na /etc/apt/sources.list. Če želite to storiti, dodajte to vrstico:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- Nato posodobite sistem z naslednjimi ukazi:
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- In nato namestite zahtevane pakete Qt in razvoj:
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
- Nato ustvarite imenik za RaspberryQt:
sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15

Ubuntu Machine

Potreben je računalnik ali virtualni stroj z nameščenim Ubuntu 20 LTS.
Najprej posodobite Ubuntu in namestite nekaj potrebnih knjižnic:

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

Nato - če že ni na voljo - ustvarite ssh-ključ in ga namestite na Malino, tako da se geslo poziv ne prikaže z vsakim rsync in uporabniško ime in geslo je treba vnesti. Na internetu je dovolj navodil, zato si bom prizanesla s podrobnim opisom tukaj.

Ustvarite strukturo imenika za knjižnice Maline

Za zahtevane datoteke ustvarim naslednjo strukturo imenika pod Dokumenti/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

Prenesi Qt vire

Prenesemo Qt vire in jih razpakiraš v imeniku 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

Zdaj moramo spremeniti mkspec datoteko malo, tako da jo lahko uporabimo z našim kompilerjem. Če želite to narediti, zaženite te ukaze:

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

Prenos navzkrižnega kompillerja

Kot cross-compiler uporabljam Linaro različico 7.4.1. Če želite to narediti, prenesite v imenik orodij in prenesite in razpakičite kompiler:

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 of Malina knjižnice

Zdaj potrebujemo izvirne knjižnice iz Maline Pi, ki jih kopiramo v Ubuntu imenik z 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/

Zdaj moramo počistiti simbolične povezave, ki jih je kopiral rsync, tako da bodo kazali na pravilne izvirne datoteke. Obstaja majhen Python skripta za prenos:

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

Nato naredite skript izvršitveni in ga pokličite:

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

Pripravo Qt

Zdaj lahko konfigurirate gradnjo in jo nato sestavite.

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 nekaj minutah je treba končati skript in nastaviti naslednje pogoje EGLFS ali ne.

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

Če to ni tako ali če se prikažejo druga sporočila o napakah, preiščite in počistite. Če želite znova zagnati konfiguracijski skript s spremenjenimi spremenljivkami, vnaprej izbrišite vsebino gradbenega imenika.
Če je vse v redu, zaženite make in naredite ukaze namestitve.

make -j4
make install

Namestite sestavljene datoteke na Malina

Če je kompilacija uspešna, se lahko sestavljene datoteke - ki se nahajajo v imeniku qt5.15 - kopirajo v Raspberry Pi. Še enkrat, to storimo z ukazom RSYNC.

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

QtCreator konfiguracije
V naslednji objavi bloga bom razložil, kako uporabljati QtCreator za uporabo s sestavljenimi knjižnicami.