Écran de configuration Raspberry

Qt sur le Raspberry Pi 4

Qt sur le Raspberry Pi 4

Qt est souvent utilisé pour développer des interfaces graphiques. Qt contient des bibliothèques C ++ pour créer des interfaces graphiques qui peuvent être compilées sur différents systèmes d'exploitation.
Cette compilation exigeant une grande puissance de calcul, il est conseillé aux processeurs relativement peu puissants d'effectuer le développement et la compilation sur un ordinateur hôte et de ne charger qu'ensuite l'application terminée sur l'ordinateur cible.
Il existe de nombreuses instructions en ligne pour développer une application Qt pour les modèles Raspberry Pi 3 et Pi 4.

Malheureusement, je n'ai pas pu en trouver un qui fonctionnait parfaitement pour le Raspberry Pi 4 et nos besoins.

Ces instructions sont fortement basées sur https://github.com/abhiTronix/raspberry-pi-cross-compilers/blob/master/QT_build_instructions.md et sont modifiées dans certains endroits afin que cela fonctionne pour moi.La version 5.15.2 est utilisée pour Qt, et j'utilise un Ubuntu 20.0.4 LTS qui est installé dans vmware comme ordinateur hôte pour la compilation croisée.

Prérequis

Matériel

Hôte [PC/Ordinateur portable] : toute machine x86/x86_64 AMD/Intel
Cible [Raspberry Pi 4] : Raspberry Pi 4

Logiciel :

Hôte : n'importe quelle machine Linux (Ubuntu 20.04 LTS testé)
Cible : Raspberry Pi 4 Linux 32-bit OS (Raspbian Bullseye Lite testé)

Remarque

Les chaînes d'outils de compilation croisée pour Raspberry Pi d'abhiTronix sont utilisées en arrière-plan.

Autres

Exigences de stockage et de temps : le répertoire de construction prend environ ~10 GB d'espace et environ 2-5 heures à compléter (basé sur les dépendances et les spécifications de la machine hôte).
Mise en réseau : votre machine cible (Raspberry Pi) et votre machine hôte (où vous effectuez une compilation croisée) DOIVENT toutes deux avoir un accès Internet et DOIVENT être sur le MÊME réseau pour suivre ces instructions.

Préparation du Raspberry Pi 4

Pour l'installation de base, nous avons besoin d'un système d'exploitation Raspberry Pi OS Lite sur le Pi 4. J'ai utilisé "2022-04-04-raspios-bullseye-armhf-lite.img.xz".

Les téléchargements et les instructions sur la façon de créer une carte SD avec ceci peuvent être trouvés sur https://www.raspberrypi.org/downloads/raspbian/.Après avoir allumé le Pi 4, le menu de configuration apparaît, dans lequel vous pouvez effectuer divers réglages (par exemple, le nom d'hôte, l'adresse IP, l'utilisateur, etc.) Pour notre configuration, nous avons besoin de "SSH" activé.

Installer et mettre à jour les progiciels

  • Ajouter des sources de développement dans /etc/apt/sources.list avec la commande suivante :
sudo sed -i -e 's/\#deb-src/deb-src/g' /etc/apt/sources.list
  • Mettez à jour le système avec les commandes suivantes :
sudo apt-get update
sudo apt-get -y dist-upgrade
echo "$USER ALL=NOPASSWD:$(which rsync)" | sudo tee --append /etc/sudoers
  • Puis installez les paquets Qt et de développement requis :
sudo apt-get install -y build-essential cmake unzip pkg-config gfortran
sudo apt-get build-dep -y qt5-qmake libqt5gui5 libqt5webengine-data libqt5webkit5 libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 gdbserver
sudo apt-get install -y libxcb-randr0-dev libxcb-xtest0-dev libxcb-shape0-dev libxcb-xkb-dev
  • Installez des paquets supplémentaires (selon vos besoins) :
sudo apt install -y libjpeg-dev libpng-dev libtiff-dev
sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt install -y libxvidcore-dev libx264-dev openjdk-8-jre-headless
# audio packages
sudo apt install -y libopenal-data libsndio7.0 libopenal1 libopenal-dev pulseaudio
# bluetooth packages
sudo apt install -y bluez-tools
sudo apt install -y libbluetooth-dev
# gstreamer (multimedia) packages
sudo apt install -y libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-pulseaudio
sudo apt install -y libgstreamer1.0-dev  libgstreamer-plugins-base1.0-dev
  • Créez également un répertoire pour RaspberryQt :
sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15

Configurez les liens symboliques importants

Téléchargez l'outil de lien symbolique et ajustez les liens symboliques.

sudo wget -P ~/ https://raw.githubusercontent.com/abhiTronix/raspberry-pi-cross-compilers/master/utils/SSymlinker
sudo chmod +x ~/SSymlinker

~/SSymlinker -s /usr/include/arm-linux-gnueabihf/asm -d /usr/include
~/SSymlinker -s /usr/include/arm-linux-gnueabihf/gnu -d /usr/include
~/SSymlinker -s /usr/include/arm-linux-gnueabihf/bits -d /usr/include
~/SSymlinker -s /usr/include/arm-linux-gnueabihf/sys -d /usr/include
~/SSymlinker -s /usr/include/arm-linux-gnueabihf/openssl -d /usr/include
~/SSymlinker -s /usr/lib/arm-linux-gnueabihf/crtn.o -d /usr/lib/crtn.o
~/SSymlinker -s /usr/lib/arm-linux-gnueabihf/crt1.o -d /usr/lib/crt1.o
~/SSymlinker -s /usr/lib/arm-linux-gnueabihf/crti.o -d /usr/lib/crti.o

Préparation d'Ubuntu

Mettre à jour le logiciel et installer des paquets supplémentaires :

sudo apt update
sudo apt install -y build-essential cmake unzip gfortran
sudo apt install -y gcc git bison python gperf pkg-config gdb-multiarch wget
sudo apt-get -y install sshpass gcc g++ gperf flex texinfo gawk bison openssl pigz libncurses-dev autoconf automake tar figlet

Préparer l'environnement de construction

  • Créer des dossiers :
sudo mkdir ~/rpi-qt
sudo mkdir ~/rpi-qt/build
sudo mkdir ~/rpi-qt/tools
sudo mkdir ~/rpi-qt/sysroot
sudo mkdir ~/rpi-qt/sysroot/usr
sudo mkdir ~/rpi-qt/sysroot/opt

sudo chown -R 1000:1000 ~/rpi-qt
  • Télécharger et extraire les sources Qt :
sudo wget -P ~/rpi-qt http://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz
sudo tar xf ~/rpi-qt/qt-everywhere-src-5.15.2.tar.xz -C ~/rpi-qt/
sudo chown -R 1000:1000 ~/rpi-qt
  • Correctif Sources QT.
cp -R ~/rpi-qt/qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabi-g++ ~/rpi-qt/qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabihf-g++
sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' ~/rpi-qt/qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.conf
sed -i -e 's/\"main\"\: \"vc_dispmanx_display_open(0)\;\"/\"main\"\: \[\"vc_dispmanx_display_open(0)\;\"\, \"EGL_DISPMANX_WINDOW_T \*eglWindow \= new EGL_DISPMANX_WINDOW_T\;\"\]/g' ~/rpi-qt/qt-everywhere-src-5.15.2/qtbase/src/gui/configure.json
  • Télécharger et extraire le compilateur :
sudo wget -P ~/rpi-qt/tools https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bullseye/GCC%2010.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.3.0-pi_3%2B.tar.gz
sudo tar xf ~/rpi-qt/tools/cross-gcc-*.tar.gz -C ~/rpi-qt/tools/
sudo chown -R 1000:1000 ~/rpi-qt
  • Fichiers rsync de raspberry : Utilisez les valeurs de votre Raspberry pour les variables raspberry_ip, raspberry_user et raspberry_pwd.
raspberry_ip=192.168.2.108
raspberry_user=pi
raspberry_pwd=raspberry
touch ~/.ssh/known_hosts
ssh-keyscan $raspberry_ip >> ~/.ssh/known_hosts
sshpass -p "$raspberry_pwd" rsync -avz --rsync-path="sudo rsync" --delete "$raspberry_user"@"$raspberry_ip":/lib ~/rpi-qt/sysroot
sshpass -p "$raspberry_pwd" rsync -avz --rsync-path="sudo rsync" --delete "$raspberry_user"@"$raspberry_ip":/usr/include ~/rpi-qt/sysroot/usr
sshpass -p "$raspberry_pwd" rsync -avz --rsync-path="sudo rsync" --delete "$raspberry_user"@"$raspberry_ip":/usr/lib ~/rpi-qt/sysroot/usr
  • Corrigez des liens symboliques :
wget -P ~/rpi-qt https://raw.githubusercontent.com/abhiTronix/rpi_rootfs/master/scripts/sysroot-relativelinks.py
sudo chmod +x ~/rpi-qt/sysroot-relativelinks.py
~/rpi-qt/sysroot-relativelinks.py ~/rpi-qt/sysroot
  • Configurez la construction de Qt :
cd ~/rpi-qt/build
CROSS_COMPILER_LOCATION="$HOME"/rpi-qt/tools/cross-pi-gcc-*
../qt-everywhere-src-5.15.2/configure -release -opengl es2 -eglfs -device linux-rasp-pi4-v3d-g++ -device-option CROSS_COMPILE=$(echo $CROSS_COMPILER_LOCATION)/bin/arm-linux-gnueabihf- -sysroot ~/rpi-qt/sysroot/ -prefix /usr/local/qt5.15 -extprefix ~/rpi-qt/qt5.15 -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -nomake tests -make libs -pkg-config -no-use-gold-linker -v -recheck -L$HOME/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf -I$HOME/rpi-qt/sysroot/usr/include/arm-linux-gnueabihf
  • Qt build :
make -j$(nproc)
make install
  • rsync les binaires Qt avec Raspberry :
sshpass -p "$raspberry_pwd" rsync -avz --rsync-path="sudo rsync" ~/rpi-qt/qt5.15 "$raspberry_user"@"$raspberry_ip":/usr/local

Dernière étape sur la machine cible (Raspberry Pi)

  • Mettez à jour le linker sur Raspberry Pi

Saisissez la commande suivante sur le Raspberry Pi pour mettre à jour l'appareil, permettant au linker de trouver les nouveaux fichiers binaires QT :

echo /usr/local/qt5.15/lib | sudo tee /etc/ld.so.conf.d/qt5.15.conf
sudo ldconfig

Installation de Qt Creator

La meilleure façon de développer des applications Qt est d'utiliser Qt Creator. Pour l'installer, veuillez télécharger et exécuter les fichiers d'installation en ligne à partir du site Web de Qt.

Configurer Qt Creator pour la compilation croisée

Lisez le blog Configurer Qt-Creator sur Ubuntu 20 Lts pour la compilation croisée pour inclure les binaires compilés (dossier ~/rpi-qt/qt5.15) dans Qt Creator.

Suggestions ou erreurs

Si vous avez des suggestions d'améliorations ou si vous trouvez des erreurs, n'hésitez pas à utiliser le formulaire de contact à la fin de cette page et à nous les communiquer.

Licence de copyright

Copyright © 2022 Interelectronix e.K.
Le code source de ce projet est sous licence GPL-3.0.

Elle pourrait être intéressée aussi

Installer Raspberry Pi OS sur le Raspberry Compute Module 4

Voici un guide pour installer Raspberry Pi OS Lite sur le Compute Module 4. J'utilise Ubuntu 20, installé dans une machine virtuelle, comme ordinateur de travail.

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

Voici un guide pour effectuer la compilation croisée de Qt 5.15.2 pour Raspberry Pi 4 et l'installation sur le Compute Module 4. Il s'agit d'une mise à jour de mon article de blog Qt sur le Raspberry Pi 4, mais j'utilise cette fois Raspberry Pi OS Lite.

Configurer Qt-Creator sur Ubuntu 20 LTS pour la compilation croisée

Voici un guide pour configurer Qt-Creator pour pouvoir utiliser des bibliothèques Qt compilées pour le Raspberry Pi 4 et pour créer des applications pour le Raspberry.

Yocto local.conf

Dans ce guide nous vous fournissons des informations, comment configurer un projet Yocto pour installer Qt et une application de démonstration Qt pour un Raspberry Pi 4 et ensuite démarrer automatiquement cette application de démonstration Qt.

Scripts de compilation croisée de Qt pour Raspberry Pi 4

Sur cette page, nous fournissons des liens de téléchargement pour des scripts permettant de configurer automatiquement la compilation croisée sur un hôte linux et un Raspberry Pi 4, ainsi qu'une description de leur utilisation.

Qt Modbus avec connexion TCP/IP

Dans ce blog, je voudrais mettre à disposition une petite application Qt-Quick (qml) comme exemple d'une connexion Modbus via TCP/IP.

Dans les exemples Qt, je n'ai trouvé que des exemples QWidget pour les connexions Modbus et, après avoir récemment créé une application Qt Quick dans ce but, je voudrais fournir une version réduite à titre d'exemple.

Application de lancement automatique de Raspberry Pi 4 au démarrage

Si vous avez créé une application Qt - ou toute autre application - pour le Raspberry Pi 4, vous souhaiterez très souvent qu'une fois terminée l'application soit appelée immédiatement après le redémarrage du Raspberry. Vous tenterez comme souvent de le faire avec des scripts de démarrage, qui peuvent être saisis à différents endroits. Cependant, il est plus judicieux de configurer cela via systemd.

Exécuter Windows .exe dans l'application Qt

La tâche consistait à écrire une application Qt Quick (GUI) pour télécharger un nouveau firmware sur un contrôleur tactile. Le logiciel de téléchargement a été fourni par le fabricant dans une application .exe qui charge un fichier .bin sur le contrôleur tactile. J'ai voulu utiliser les classes Qt « QProces s», qui permettent d'appeler et de contrôler des applications shell. Sous Linux, je l'avais déjà utilisé avec succès de nombreuses fois auparavant, mais sous Windows, cela ne fonctionnait pas au début.