Cross-compilation Qt 5.12.5 pour Raspberry Pi

De Wiki LOGre
Révision datée du 16 octobre 2019 à 20:38 par Matio (discussion | contributions) (Page créée avec « Création de Cross-compilation Qt 5.12.5 pour Raspberry Pi Prévisualisation Désolé, nous ne pouvons enregistrer votre modification à cause d’une perte d’informa... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Création de Cross-compilation Qt 5.12.5 pour Raspberry Pi Prévisualisation

Désolé, nous ne pouvons enregistrer votre modification à cause d’une perte d’informations concernant votre session.

Vous avez peut-être été déconnecté. Veuillez vérifier que vous êtes toujours connecté et réessayer. Si cela échoue de nouveau, essayez en vous déconnectant, puis en vous reconnectant, et vérifiez que votre navigateur accepte les témoins (cookies) de ce site. Introduction Pourquoi ce tutoriel ?

Ceci est une mise à jour du tutoriel pour la version 5.12.5 de Qt.

Le but de ce tutoriel est de mettre en place une chaine de cross-compilation entre un PC linux et un RaspberryPi 3. On va aussi configurer l’IDE QtCreator pour cette config.

J'ai essayé de faire fonctionner QtMultimedia mais cette partie de Qt ne fonctionne pas complètement sur Raspberry Pi. On peut lire du son mais pas de vidéo.

Pour compenser j'ai décidé d'inclure libvlc dans ce tuto. Matériel nécessaire

Pour les besoins de ce tutoriel, je vais utiliser un machine virtuelle sous Debian 9. J’aurais juste configuré les additions invités avant le tuto. Cinnamon fonctionnant mal avec VirtualBox, je conseille d’utiliser un autre DE. Ici j’ai choisi Gnome.

Ma configuration est la suivante :

   PC sous debian 9
   VM Virtual Box sous debian 9
   Raspberry Pi 3 avec Raspbian stretch version complète
   Le RaspberryPi est en 192.168.1.2

Quelques points importants :

   Testé avec carte SD de 16Go, non testé avec une carte 8Go, mais devrait fonctionner.
   Il est tout à fait possible de tout faire sur le PC host. La Vm est là uniquement pour le tuto mais je conseille de faire un essai sur une VM avant car on peut vite faire des erreurs.

Je passe l’installation de Raspbian sur la Pi, c’est tout à fait classique. Il est tout de même important de prendre une version complète car le but est de faire des fenêtres graphiques. Installation de la chaîne de cross-compilation Configuration Raspberry Pi

On va maintenant configurer le Raspberry Pi et installer les paquets dont on aura besoin plus tard. Il faut effectuer toutes ces commandes en sudo ou en root sur le Raspberry Pi.

1. On commence éditer le fichier /etc/apt/sources.list pour décommenter la dernière ligne qui doit ressembler à ceci :

deb-src http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi

On peut éditer avec :

nano /etc/apt/sources.list

2. On effectue les mises à jour puis on reboot :

sudo apt update sudo apt upgrade reboot

3. On fait une mise à jour du firmware puis on reboot à nouveau :

rpi-update reboot

4. Il faut bien vérifier que le firmware est à jour en relançant rpi-update jusqu’à ce que ce message s’affiche : Your firmware is already up to date

5. On va maintenant autoriser le login du compte root en ssh. Pour cela il faut éditer le fichier « /etc/ssh/sshd_config » , trouver la ligne « PermitRootLogin » la décommenter et passer son paramètre à « yes ».

sudo nano /etc/ssh/sshd_config

6. Il faut également donner un mot de passe au compte root pour pouvoir se connecter en ssh :

sudo su passwd

7. On peut maintenant se connecter en tant que root en ssh. On le fait.

8. On installe ces paquets :

sudo apt update sudo apt build-dep qt4-x11 sudo apt build-dep qtbase-opensource-src sudo apt install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 gdbserver sudo apt install libegl1-mesa libegl1-mesa-dev libgles2-mesa libgles2-mesa-dev sudo apt install wiringpi libnfc-bin libnfc-dev fonts-texgyre libts-dev sudo apt install libbluetooth-dev bluez-tools gstreamer1.0-plugins* libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libopenal-data libopenal1 libopenal-dev pulseaudio sudo apt install -y libgstreamer*-dev sudo apt install -y gstreamer*-dev sudo apt install -y libasound2-dev libavcodec-dev libavformat-dev libswscale-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev gstreamer-tools gstreamer0.10-plugins-good libgstreamer-plugins-* sudo apt install qtdeclarative5-dev sudo apt install libvlc-dev

9. On va créer un répertoire pour Qt dans /usr/local :

sudo mkdir /usr/local/qt5pi sudo chown pi:pi /usr/local/qt5pi

On a terminé avec le Raspberry Pi Configuration de Debian

1. Mises à jour :

sudo apt update sudo apt upgrade

2. Installations de dépendances :

sudo apt install gcc git bison python gperf pkg-config

3. Création du répertoire d’installation. Contrairement au tuto précédent, on va installer Qt dans le répertoire personnel :

mkdir ~/raspi cd ~/raspi

4. Téléchargement des outils de cross-compilation :

git clone https://github.com/raspberrypi/tools

5. Ajout du PATH dans les variables d’environnement. On va pour cela éditer le fichier « ~/.bashrc » avec nano par exemple :

export PATH=$PATH:~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

Reboot :

reboot

6. Une fois redémarré:

cd ~/raspi

8. Création du sysroot et synchronisation. Il faut remplacer l’IP par celle de la RaspberryPi chez vous :

mkdir sysroot sysroot/usr sysroot/opt rsync -avz root@192.168.1.2:/lib sysroot rsync -avz root@192.168.1.2:/usr/include sysroot/usr rsync -avz root@192.168.1.2:/usr/lib sysroot/usr rsync -avz root@192.168.1.2:/opt/vc sysroot/opt

6. Téléchargement et extraction de Qt 5.12.5 :

wget http://download.qt.io/official_releases/qt/5.12/5.12.5/single/qt-everywhere-src-5.12.5.tar.xz tar xvf qt-everywhere-src-5.12.5.tar.xz


7. téléchargement du script et fix des liens symboliques :

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

13. On lance le .configure dans le dossier de build. Il faut remplacer [RPI-VERSION] par ce le contenu du la liste ci dessous en fonction de la version de votre raspberry pi.

   Raspberry Pi 0/1:
   Raspberry Pi 2: linux-rasp-pi-g++
   Raspberry Pi 3:

cd ./configure -release -opengl es2 -device [RPI-VERSION] -device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -skip qtwayland -skip qtlocation -skip qtscript -make libs -prefix /usr/local/qt5pi -extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -no-use-gold-linker -v -no-gbm

On compile et installe. La compilation peut prendre plusieurs heures. Si la machine a plusieurs processeurs de configurés, l'option -j permet d'accélérer la compilation, par exemple avec 4 processeur on peut faire "make -j4" à la place de "make" :

make make install

15. On déploie Qt sur le RPi :

cd .. rsync -avz qt5pi pi@192.168.1.2:/usr/local

16. Qt est maintenant installé! Pour tester que tout fonctionne correctement, on peut créer deux fichier qu’on va compiler. On va créer deux document, un .cpp et un .pro :

Création du .cpp :

//main.cpp

  1. include <QCoreApplication>
  2. include <QDebug>

int main(int argc, char *argv[]) {

   QCoreApplication a(argc, argv);
   qDebug()<<"Hello World"<<endl;
   return a.exec();

}

Création du fichier test.pro, on copie colle ce qui suit dans le fichier :

//test.pro QT -= gui

CONFIG += c++11 console CONFIG -= app_bundle

  1. The following define makes your compiler emit warnings if you use
  2. any feature of Qt which as been marked deprecated (the exact warnings
  3. depend on your compiler). Please consult the documentation of the
  4. deprecated API in order to know how to port your code away from it.

DEFINES += QT_DEPRECATED_WARNINGS

  1. You can also make your code fail to compile if you use deprecated APIs.
  2. In order to do so, uncomment the following line.
  3. You can also select to disable deprecated APIs only up to a certain version of Qt.
  4. DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0

SOURCES += main.cpp

17. On créer le makefile avec qmake puis on compile avec make :

~/raspi/qt5/bin/qmake

make

18. On transfert le fichier exécutable sur la pi. On peut utiliser cette scp :

scp test root@192.168.1.2:/home/pi/Documents

22. On se connecte en ssh et on lance le programme :

./test

23. Il doit nous afficher ceci :

Hello World

Configuration de l’IDE

Dans cette partie, je vais essayer de décrire au mieux la configuration de QtCreator.

Comme des images valent mieux qu'un long discours :

Explications à venir

   QtCreator configuration 1.png
   QtCreator configuration 2.png
   QtCreator configuration 3.png
   QtCreator configuration 4.png
   QtCreator configuration 5.png
   QtCreator configuration 6.png
   QtCreator configuration 7.png
   Capture du 2019-05-19 13-00-05.png

Sources

https://www.youtube.com/watch?v=eCdPfnR8iI0

http://ulasdikme.com/projects/raspberry/Qt_for_raspberrypi.php

Merci à lui ! Avancé Caractères spéciaux Aide

Introduction

Pourquoi ce tutoriel ?

Ceci est une mise à jour du tutoriel pour la version 5.12.5 de Qt.

Le but de ce tutoriel est de mettre en place une chaine de cross-compilation entre un PC linux et un RaspberryPi 3. On va aussi configurer l’IDE QtCreator pour cette config.

J'ai essayé de faire fonctionner QtMultimedia mais cette partie de Qt ne fonctionne pas complètement sur Raspberry Pi. On peut lire du son mais pas de vidéo.

Pour compenser j'ai décidé d'inclure libvlc dans ce tuto.

Matériel nécessaire

Pour les besoins de ce tutoriel, je vais utiliser un machine virtuelle sous Debian 9. J’aurais juste configuré les additions invités avant le tuto. Cinnamon fonctionnant mal avec VirtualBox, je conseille d’utiliser un autre DE. Ici j’ai choisi Gnome.

Ma configuration est la suivante :

  • PC sous debian 9
  • VM Virtual Box sous debian 9
  • Raspberry Pi 3 avec Raspbian stretch version complète
  • Le RaspberryPi est en 192.168.1.2

Quelques points importants :

  • Testé avec carte SD de 16Go, non testé avec une carte 8Go, mais devrait fonctionner.
  • Il est tout à fait possible de tout faire sur le PC host. La Vm est là uniquement pour le tuto mais je conseille de faire un essai sur une VM avant car on peut vite faire des erreurs.

Je passe l’installation de Raspbian sur la Pi, c’est tout à fait classique. Il est tout de même important de prendre une version complète car le but est de faire des fenêtres graphiques.

Installation de la chaîne de cross-compilation

Configuration Raspberry Pi

On va maintenant configurer le Raspberry Pi et installer les paquets dont on aura besoin plus tard. Il faut effectuer toutes ces commandes en sudo ou en root sur le Raspberry Pi.

1. On commence éditer le fichier /etc/apt/sources.list pour décommenter la dernière ligne qui doit ressembler à ceci :

deb-src http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi

On peut éditer avec :

nano /etc/apt/sources.list

2. On effectue les mises à jour puis on reboot :

sudo apt update
sudo apt upgrade
reboot

3. On fait une mise à jour du firmware puis on reboot à nouveau :

rpi-update
reboot

4. Il faut bien vérifier que le firmware est à jour en relançant rpi-update jusqu’à ce que ce message s’affiche : Your firmware is already up to date

5. On va maintenant autoriser le login du compte root en ssh. Pour cela il faut éditer le fichier « /etc/ssh/sshd_config » , trouver la ligne « PermitRootLogin » la décommenter et passer son paramètre à « yes ».

sudo nano /etc/ssh/sshd_config

6. Il faut également donner un mot de passe au compte root pour pouvoir se connecter en ssh :

sudo su
passwd

7. On peut maintenant se connecter en tant que root en ssh. On le fait.

8. On installe ces paquets :

sudo apt update
sudo apt build-dep qt4-x11
sudo apt build-dep qtbase-opensource-src
sudo apt install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 gdbserver
sudo apt install libegl1-mesa libegl1-mesa-dev libgles2-mesa libgles2-mesa-dev
sudo apt install wiringpi libnfc-bin libnfc-dev fonts-texgyre libts-dev
sudo apt install libbluetooth-dev bluez-tools gstreamer1.0-plugins* libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libopenal-data libopenal1 libopenal-dev pulseaudio
sudo apt install -y libgstreamer*-dev
sudo apt install -y gstreamer*-dev
sudo apt install -y libasound2-dev libavcodec-dev libavformat-dev libswscale-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev gstreamer-tools gstreamer0.10-plugins-good libgstreamer-plugins-*
sudo apt install qtdeclarative5-dev
sudo apt install libvlc-dev

9. On va créer un répertoire pour Qt dans /usr/local :

sudo mkdir /usr/local/qt5pi
sudo chown pi:pi /usr/local/qt5pi

On a terminé avec le Raspberry Pi

Configuration de Debian

1. Mises à jour :

sudo apt update
sudo apt upgrade

2. Installations de dépendances :

sudo apt install gcc git bison python gperf pkg-config

3. Création du répertoire d’installation. Contrairement au tuto précédent, on va installer Qt dans le répertoire personnel :

mkdir ~/raspi
cd ~/raspi

4. Téléchargement des outils de cross-compilation :

git clone https://github.com/raspberrypi/tools

5. Ajout du PATH dans les variables d’environnement. On va pour cela éditer le fichier « ~/.bashrc » avec nano par exemple :

export PATH=$PATH:~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

Reboot :

reboot

6. Une fois redémarré:

cd ~/raspi

8. Création du sysroot et synchronisation. Il faut remplacer l’IP par celle de la RaspberryPi chez vous :

mkdir sysroot sysroot/usr sysroot/opt
rsync -avz root@192.168.1.2:/lib sysroot
rsync -avz root@192.168.1.2:/usr/include sysroot/usr
rsync -avz root@192.168.1.2:/usr/lib sysroot/usr
rsync -avz root@192.168.1.2:/opt/vc sysroot/opt

6. Téléchargement et extraction de Qt 5.12.5 :

wget http://download.qt.io/official_releases/qt/5.12/5.12.5/single/qt-everywhere-src-5.12.5.tar.xz
tar xvf  qt-everywhere-src-5.12.5.tar.xz


7. téléchargement du script et fix des liens symboliques :

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

13. On lance le .configure dans le dossier de build. Il faut remplacer [RPI-VERSION] par ce le contenu du la liste ci dessous en fonction de la version de votre raspberry pi.

  • Raspberry Pi 0/1:
  • Raspberry Pi 2: linux-rasp-pi-g++
  • Raspberry Pi 3:
cd 
./configure -release -opengl es2 -device [RPI-VERSION] -device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -skip qtwayland -skip qtlocation -skip qtscript -make libs -prefix /usr/local/qt5pi -extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -no-use-gold-linker -v -no-gbm

On compile et installe. La compilation peut prendre plusieurs heures. Si la machine a plusieurs processeurs de configurés, l'option -j permet d'accélérer la compilation, par exemple avec 4 processeur on peut faire "make -j4" à la place de "make" :

make
make install

15. On déploie Qt sur le RPi :

cd ..
rsync -avz qt5pi pi@192.168.1.2:/usr/local

16. Qt est maintenant installé! Pour tester que tout fonctionne correctement, on peut créer deux fichier qu’on va compiler. On va créer deux document, un .cpp et un .pro :

Création du .cpp :

//main.cpp
#include <QCoreApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qDebug()<<"Hello World"<<endl;

    return a.exec();
}

Création du fichier test.pro, on copie colle ce qui suit dans le fichier :

//test.pro
QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle

# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += main.cpp

17. On créer le makefile avec qmake puis on compile avec make :

~/raspi/qt5/bin/qmake 

make

18. On transfert le fichier exécutable sur la pi. On peut utiliser cette scp :

scp test root@192.168.1.2:/home/pi/Documents

22. On se connecte en ssh et on lance le programme :

./test

23. Il doit nous afficher ceci :

Hello World

Configuration de l’IDE

Dans cette partie, je vais essayer de décrire au mieux la configuration de QtCreator.

Comme des images valent mieux qu'un long discours :

Explications à venir

Sources

https://www.youtube.com/watch?v=eCdPfnR8iI0

http://ulasdikme.com/projects/raspberry/Qt_for_raspberrypi.php

Merci à lui ! Résumé : 175 Aperçu du résumé de modification : (Installation d'une chaine de CrossCompilation pour Qt 5.12.5 sur Raspberry Pi 3) Suivre cette page

Toutes les contributions à Wiki LOGre sont considérées comme publiées sous les termes de la Creative Commons Attribution-ShareAlike (voir Wiki LOGre:Copyrights pour plus de détails). Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici. Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public ou d’une ressource libre similaire. N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !

Données d’optimisation de l’analyseur : Catégories :

   Pages avec des erreurs de coloration syntaxiqueHowtoLinuxLinux EmbarqueRaspberry Pi

Menu de navigation

   Matio
   Discussion
   Préférences
   Liste de suivi
   Contributions
   Se déconnecter
   Page
   Discussion
   Créer
   Suivre

Rechercher

Association

   Accueil
   Projets - Docs
   Adhésion
   Trombinoscope
   Comptes-rendus
   Diaporama
   Blog

Navigation

   Catégories
   Modifications récentes
   Page au hasard
   Aide

Outils

   Pages liées
   Importer un fichier
   Pages spéciales
   Information sur la page
   Politique de confidentialité
   À propos de Wiki LOGre
   Avertissements
   Creative Commons Attribution-ShareAlike	
   Powered by MediaWiki