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:
- par Uvindu Wijesinghe : https://github.com/UvinduW/Cross-Compiling-Qt-for-Raspberry-Pi-4
Attention
Il y a une mise à jour de cet article, qui contient une compilation croisée pour Raspberry Pi, Qt6 et Ubuntu 22.04 LTS. Suivez ce lien si vous avez besoin de versions plus récentes.
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.- 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 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/
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 pi@192.168.1.7:/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.