qt5 embedded
TRANSCRIPT
![Page 1: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/1.jpg)
Octobre 2016
« Qt5 pour l'embarqué »
Pierre-Jean TEXIER
![Page 2: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/2.jpg)
2
Présentation
● Ingénieur Linux Embarqué (Amplitude Systèmes)
● Co-auteur « Yocto for Raspberry-Pi »
● Co-Auteur Open Silicium
● « FOSS » enthusiast
![Page 3: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/3.jpg)
3
Qt5 : Quesako ?!
– Prononcé : /kju t/ Cute et non pas QTː →
– Première version en 1996 (trolltech) Achat par Nokia en 2008 Qt5 en 2012 (Digia)→ →
– Pour créer des GUI mais pas que …
● Différentiation au fil des releases (port série, bus CAN, Network, …)
– Un ensemble de librairies et d'outils
● On parlera de framework !
– Cross Platform
![Page 4: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/4.jpg)
4
Qt5 : ArchitectureArchitecture Qt5
Essentials
Qt GUI
Add-ons
...
Qt Core
Qt ConcurrentQt D-Bus
Qt 3D
Qt NFC
Qt Serial Port
Qt Bluetooth
Qt SVG
Qt Location
Qt Serial Bus
Qt Multimedia Widgets
Qt Multimedia Qt QML Qt Quick
Qt Network
Qt Quick Controls
Qt SQL
...
Tools
Qt Designer
Qt Creator
...
![Page 5: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/5.jpg)
5
Qt5 : ArchitectureArchitecture Qt5
Essentials
Qt GUI
Add-ons
...
Qt Core
Qt ConcurrentQt D-Bus
Qt 3D
Qt NFC
Qt Serial Port
Qt Bluetooth
Qt SVG
Qt Location
Qt Serial Bus
Qt Multimedia Widgets
Qt Multimedia Qt QML Qt Quick
Qt Network
Qt Quick Controls
Qt SQL
...
Tools
Qt Designer
Qt Creator
...
Brique de base : le core !
![Page 6: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/6.jpg)
6
Qt5 : ArchitectureArchitecture Qt5
Essentials
Qt GUI
Add-ons
...
Qt Core
Qt ConcurrentQt D-Bus
Qt 3D
Qt NFC
Qt Serial Port
Qt Bluetooth
Qt SVG
Qt Location
Qt Serial Bus
Qt Multimedia Widgets
Qt Multimedia Qt QML Qt Quick
Qt Network
Qt Quick Controls
Qt SQL
...
Tools
Qt Designer
Qt Creator
...
Brique IHM !
![Page 7: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/7.jpg)
7
Qt5 : ArchitectureArchitecture Qt5
Essentials
Qt GUI
Add-ons
...
Qt Core
Qt ConcurrentQt D-Bus
Qt 3D
Qt NFC
Qt Serial Port
Qt Bluetooth
Qt SVG
Qt Location
Qt Serial Bus
Qt Multimedia Widgets
Qt Multimedia Qt QML Qt Quick
Qt Network
Qt Quick Controls
Qt SQL
...
Tools
Qt Designer
Qt Creator
...
Brique pour l'intégrationdes bases de données
![Page 8: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/8.jpg)
8
Qt5 : ArchitectureArchitecture Qt5
Essentials
Qt GUI
Add-ons
...
Qt Core
Qt ConcurrentQt D-Bus
Qt 3D
Qt NFC
Qt Serial Port
Qt Bluetooth
Qt SVG
Qt Location
Qt Serial Bus
Qt Multimedia Widgets
Qt Multimedia Qt QML Qt Quick
Qt Network
Qt Quick Controls
Qt SQL
...
Tools
Qt Designer
Qt Creator
...
Brique d'abstraction pourla programmation réseau (UDP, TCP, ...)
![Page 9: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/9.jpg)
9
Qt5 : ArchitectureArchitecture Qt5
Essentials
Qt GUI
Add-ons
...
Qt Core
Qt ConcurrentQt D-Bus
Qt 3D
Qt NFC
Qt Serial Port
Qt Bluetooth
Qt SVG
Qt Location
Qt Serial Bus
Qt Multimedia Widgets
Qt Multimedia Qt QML Qt Quick
Qt Network
Qt Quick Controls
Qt SQL
...
Tools
Qt Designer
Qt Creator
...
Brique pour la gestion dynamique et la customisation
d'interface
![Page 10: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/10.jpg)
10
Qt5 : ArchitectureArchitecture Qt5
Essentials
Qt GUI
Add-ons
...
Qt Core
Qt ConcurrentQt D-Bus
Qt 3D
Qt NFC
Qt Serial Port
Qt Bluetooth
Qt SVG
Qt Location
Qt Serial Bus
Qt Multimedia Widgets
Qt Multimedia Qt QML Qt Quick
Qt Network
Qt Quick Controls
Qt SQL
...
Tools
Qt Designer
Qt Creator
...
![Page 11: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/11.jpg)
11
Qt5 : Architecture
– Qt n'utilise pas d'autotools mais un outils « maison » qmake
● Il faut donc l'adapter pour du développement croisée
● Tout se passe dans le répertoire mkspecs :
– Raspberry-pi (1/2/3)– i.MX6 – i.MX7– Jetson TK1– ...
● Fichiers :
– qmake.conf– qplatformdefs.h
Options du compilateur, backend graphique, ...
Définition de la plateforme (#include,
#define)
Automatise la génération de Makefile (*.pro)
![Page 12: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/12.jpg)
12
Qt5 : les +● L'aspect affichage (QWS → QPA) : Plus de notion de Client/Serveur Couche d'abstraction plus au niveau (+ de plate-→
formes)
– Depuis Qt5 → QPA = devices/OS abstraction (meilleure gestion des plateformes et systèmes de fenêtrage)
– L'affichage en lui-même linuxFB (quand pas de GPU), EGLFS, Wayland, ...→
● Exemple :
$ ./myqt5app platform linuxfb (par défaut : /dev/fb0)
$ ./myqt5app platform linuxfb:fb=/dev/fb2
ou encore
$ ./myqt5app platform eglfs
![Page 13: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/13.jpg)
13
Qt5 : les +
L'aspect event (souris, clavier, tactile)
– Plugin Input
● evdev Au travers du pilote noyau : → /dev/input/event*
Helpers : – libinput, (alternative au plugin evdev de Qt)
– tslib, pour du résistif par exemple● Calibration via l'utilitaire ts_calibrate● Fichier de calibration dans /etc pointercal→
– evedevtouch (pour le multi-touch)
![Page 14: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/14.jpg)
14
Qt5 : les +
● Exemple :
$ ./myqt5app platform linuxfb plugin evedevtouch
● Pour EGLFS (sans libinput)
– Exemple : QT_QPA_PLATFORM=eglfs– On passera par les variables d'env :
● QT_QPA_EVDEV_MOUSE_PARAMETERS,● QT_QPA_EVDEV_KEYBOARD_PARAMETERS,● QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS
– Exemple :
QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0
● Pour logger les « event » :
export QT_LOGGING_RULES=qt.qpa.*=true
![Page 15: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/15.jpg)
15
Qt5 : Compilation de Qt 1/2● Les besoins :
– Une « cross-toolchain » => ct-ng, Linaro, Build-system, ...
– un sysroot => Le root filesystem
● Choix de la cible :
$ ls l <qtsources>/qtbase/mkspecs/devices/
● Prenons l'exemple pour linuximx6g++
● L'étape du « configure » => mais aucun rapport avec les Autotools !
$ ./configure v release \
device linuximx6g++ \
deviceoption CROSS_COMPILE=<toolchainpath> \
sysroot <rootfspath> \
prefix <installpath>
![Page 16: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/16.jpg)
16
Qt5 : Compilation de Qt 2/2Configure summary
Building on: linuxg++ (x86_64, CPU features: mmx sse sse2)
Building for: devices/linuximx6g++ (arm, CPU features: neon)
QPA backends:
...
EGLFS ................ yes
EGLFS i.MX6 ........ yes
EGLFS i.MX6 Wayland. no
EGLFS EGLDevice .... no
...
EGLFS Raspberry Pi . no
LinuxFB .............. yes
...
● Et pour compiler !!!! Il suffit de lancer la commande de compilation→
– $ make j(nb processors)
– $ make install
![Page 17: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/17.jpg)
17
Qt5 : QtCreator
● Création du Kit (Outils > Options > Compiler et Exécuter)
![Page 18: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/18.jpg)
18
Qt5 : QtCreator
● Périphérique de déploiement : « permet de déployer le binaire sur la cible » (sftp)
● Dans le .pro :
target.path= /usr/bin
INSTALLS += target
● Test de communication
Where ?
![Page 19: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/19.jpg)
19
Qt5 : Build System
● Buildroot
– $ make freescale_imx6qsabresd_defconfig
– $ make xconfig
– Notion de firmware
![Page 20: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/20.jpg)
20
Qt5 : Build System
● Yocto/Open Embedded– Intégration de la metaqt5 (fichier bblayers.conf)
→ https://github.com/meta-qt5/meta-qt5
– Pour générer une toochain générique :
$ bitbake metatoolchainqt5
● Aura pour effet de générer un sdk relogeable (32 bits ou 64 bits)
– On pourra intégrer les éléments à l'image de cette manière :
IMAGE_INSTALL += "\
qtbase qtconnectivity \
"
![Page 21: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/21.jpg)
21
Démo 1 : présentation
● WaRP7 en mode AP (Access point) :
– Dnsmasq pour l'attribution des IP
– Hostapd pour la configuration du point d'accès (ssid=warp7 / passphrase=iotonwarp7)
QHostAddress::Broadcast
![Page 22: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/22.jpg)
22
Démo 1 : fichier .pro
QT += core network
QT -= gui
TEMPLATE = app
TARGET = WaRP7_Broadcast
CONFIG += console
SOURCES += main.cpp\
CWaRP7Broadcast.cpp
HEADERS += \
CWaRP7Broadcast.h
target.path= /usr/bin
INSTALLS += target
Nos module
GUI ?!
Makefile pour application
La cible, notre binaire !
Chemin d'installation sur la cible
Fichiers du projet
![Page 23: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/23.jpg)
23
Démo 2
● Pour intégrer le module buletooth
QT += core bluetooth
![Page 24: Qt5 embedded](https://reader034.vdocuments.site/reader034/viewer/2022050900/589cb7ee1a28abbe4a8b704f/html5/thumbnails/24.jpg)
24
Conclusion
● https://github.com/texierp/meetup_linux-embedded_bdx/tree/master/18-Octobre/Qt5