Qt 5.15 křížová kompilace pro Raspberry Compute Module 4 na Ubuntu 20 LTS

Úvod

Toto je návod pro křížovou kompilaci Qt 5.15.2 pro Raspberry Pi 4 a jeho instalaci na Compute Module 4. Je to aktualizace mého blogového příspěvku Qt na Raspberry Pi 4, s tím rozdílem, že tentokrát používám Raspberry Pi OS Lite (ke stažení zde: https://www.raspberrypi.org/software/operating-systems/), Qt verze 5.15.2 a Ubuntu 20 LTS jako křížový kompilační počítač ve virtuálním stroji.

Zdroje

Kromě mého starého blogového příspěvku (viz výše) jsem také použil následující zdroje:

Raspberry Pi OS Lite

Nainstalujte Raspberry Pi OS Lite na Raspberry Pi 4 nebo na Raspberry Compute Module 4, jak je popsáno v mém blogovém příspěvku Instalace Raspberry Pi OS na Raspberry Compute Module 4 .

Qt 5.15.2 na Ubuntu 20 LTS

Po instalaci operačního systému Raspberry Pi na výpočetní modul a spuštění Raspberry zpět z paměti eMMC je čas nainstalovat požadovaný software na Raspberry a na počítač Ubuntu.

Malinový výpočetní modul 4

Níže uvedené kroky by měly fungovat také na "normálním" Raspberry Pi 4.

Po zapnutí Pi 4 otevřete konfigurační menu.

sudo raspi-config
Pro naši konfiguraci potřebujeme "SSH" a "GL (Fake KMS)". Podívejte se na následující dva snímky obrazovky.
SSH Konfiguration

FKMS Konfiguration

- Pak přidejte vývojové zdroje do /etc/apt/sources.list. Chcete-li to provést, přidejte následující řádek:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- Poté aktualizujte systém pomocí následujících příkazů:
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- A pak nainstalujte 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
- Pak vytvořte adresář pro RaspberryQt:
sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15

Ubuntu stroj

Je vyžadován počítač nebo virtuální počítač s nainstalovaným Ubuntu 20 LTS.
Nejprve aktualizujte Ubuntu a nainstalujte některé požadované knihovny:

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

Pak - pokud ještě není k dispozici - vytvořte ssh-klíč a nainstalujte jej na Raspberry, aby se při každém rsyncu nezobrazovala výzva k zadání hesla a bylo nutné zadat uživatelské jméno a heslo. Na internetu je dostatek instrukcí, takže si zde ušetřím podrobný popis.

Vytvořte adresářovou strukturu pro knihovny Raspberry

Pro požadované soubory vytvořím následující adresářovou strukturu 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

Stáhnout Qt zdroje

Stáhneme Qt zdroje a rozbalíme je v adresáři 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

Nyní musíme trochu upravit soubor mkspec, abychom jej mohli použít s naším kompilátorem. Chcete-li to provést, spusťte následující pří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

Stáhnout křížový kompilátor

Jako křížový kompilátor používám Linaro verze 7.4.1. Chcete-li to provést, přejděte do adresáře tools a stáhněte a rozbalte 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 knihoven Raspberry

Nyní potřebujeme původní knihovny z Raspberry Pi, které kopírujeme do adresářů Ubuntu pomocí 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/

Nyní musíme vyčistit symbolické odkazy, které byly zkopírovány rsyncem tak, aby ukazovaly na správné původní soubory. Ke stažení je malý skript Pythonu:

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

Pak skript vytvořte spustitelný a zavolejte jej:

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

Kompilace Qt

Nyní můžeme nakonfigurovat sestavení a poté jej zkompilovat.

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 několika minutách by měl být skript dokončen a následující podmínky EGLFS by měly být nastaveny nebo nenastaveny.

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

Pokud tomu tak není nebo pokud se zobrazí jiné chybové zprávy, prozkoumejte a vyčistěte. Pokud chcete znovu spustit konfigurační skript se změněnými proměnnými, odstraňte předem obsah adresáře sestavení.
Pokud je vše v pořádku, spusťte příkazy make a make install.

make -j4
make install

Nainstalujte kompilované soubory na Raspberry

Pokud je kompilace úspěšná, zkompilované soubory - jsou umístěny v adresáři qt5.15 - lze zkopírovat do Raspberry Pi. Opět to uděláme pomocí příkazu rsync.

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

Konfigurace QtCreator

V příštím příspěvku na blogu vysvětlím, jak používat QtCreator pro použití s kompilovanými knihovnami.