Qt 5.15 compilation croisée pour Raspberry Compute Module 4 sur Ubuntu 20 LTS

Introduction

Ceci est un guide pour la compilation croisée de Qt 5.15.2 pour Raspberry Pi 4 et son installation sur le module de calcul 4. C’est une mise à jour de mon article de blog Qt sur le Raspberry Pi 4, à la différence que cette fois j’utilise Raspberry Pi OS Lite (télécharger ici: https://www.raspberrypi.org/software/operating-systems/), Qt version 5.15.2 et Ubuntu 20 LTS comme ordinateur de compilation croisée dans une machine virtuelle.

Sources

En plus de mon ancien billet de blog (voir ci-dessus), j’ai également utilisé les sources suivantes:

Raspberry Pi OS Lite

Installez Raspberry Pi OS Lite sur un Raspberry Pi 4 ou sur un Raspberry Compute Module 4 comme décrit dans mon article de blog Installation de Raspberry Pi OS sur Raspberry Compute Module 4 .

Qt 5.15.2 sur Ubuntu 20 LTS

Une fois que le système d’exploitation Raspberry Pi est installé sur le module de calcul et que le Raspberry redémarre à partir de la mémoire eMMC, il est temps d’installer le logiciel requis sur le Raspberry et sur la machine Ubuntu.

Module de calcul Raspberry 4

Les étapes ci-dessous devraient également fonctionner sur un Raspberry Pi 4 « normal ».

Après avoir allumé le Pi 4, ouvrez le menu de configuration.

sudo raspi-config
Pour notre configuration, nous avons besoin de « SSH » et « GL (Fake KMS) ». Voir les deux captures d’écran suivantes.
SSH Konfiguration

FKMS Konfiguration

- Ajoutez ensuite des sources de développement à /etc/apt/sources.list. Pour ce faire, ajoutez la ligne suivante :
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- Ensuite, mettez à jour le système avec les commandes suivantes:
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- Et puis installez les paquets Qt et de développement requis:
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
- Créez ensuite un répertoire pour RaspberryQt :
sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15

Machine Ubuntu

Un PC ou une machine virtuelle avec Ubuntu 20 LTS installé est requis.
Tout d’abord, mettez Ubuntu à jour et installez les bibliothèques requises:

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

Ensuite, si ce n’est pas déjà disponible, créez une clé ssh et installez-la sur le Raspberry, de sorte qu’une invite de mot de passe n’apparaisse pas avec chaque rsync et que le nom d’utilisateur et le mot de passe doivent être saisis. Il y a assez d’instructions sur Internet, donc je vais m’épargner la description détaillée ici.

Créer une structure de répertoires pour les bibliothèques Raspberry

Pour les fichiers requis, je crée la structure de répertoires suivante sous 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

Télécharger les ressources Qt

Nous téléchargeons les ressources Qt et les décompressons dans le répertoire 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

Maintenant, nous devons modifier un peu le fichier mkspec afin que nous puissions l’utiliser avec notre compilateur. Pour ce faire, exécutez les commandes suivantes :

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

Télécharger Cross-Compiler

En tant que compilateur croisé, j’utilise un Linaro version 7.4.1. Pour ce faire, accédez au répertoire tools et téléchargez et décompressez le compilateur :

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 des bibliothèques Raspberry

Maintenant, nous avons besoin des bibliothèques originales du Raspberry Pi, que nous copions dans les répertoires Ubuntu avec 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/

Nous devons maintenant nettoyer les liens symboliques qui ont été copiés par le rsync afin qu’ils pointent vers les fichiers originaux corrects. Il existe un petit script Python à télécharger:

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

Ensuite, rendez le script exécutable et appelez-le:

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

Compilation de Qt

Nous pouvons maintenant configurer la génération, puis la compiler.

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

Après quelques minutes, le script doit être terminé et les conditions EGLFS suivantes doivent être définies ou non.

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

Si ce n’est pas le cas ou si d’autres messages d’erreur apparaissent, veuillez enquêter et nettoyer. Si vous souhaitez exécuter à nouveau le script de configuration avec des variables modifiées, veuillez supprimer au préalable le contenu du répertoire de build.
Si tout va bien, exécutez les commandes make et make install.

make -j4
make install

Installer les fichiers compilés sur le Raspberry

Si la compilation réussit, les fichiers compilés - ils se trouvent dans le répertoire qt5.15 - peuvent être copiés sur le Raspberry Pi. Encore une fois, nous le faisons en utilisant la commande rsync.

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

Configuration de QtCreator

Dans le prochain article de blog , j’expliquerai comment utiliser QtCreator pour une utilisation avec les bibliothèques compilées.