Upload
embedded-linux-bdx
View
196
Download
0
Embed Size (px)
Citation preview
Octobre 2016
« Qt5 pour l'embarqué »
Pierre-Jean TEXIER
2
Présentation
● Ingénieur Linux Embarqué (Amplitude Systèmes)
● Co-auteur « Yocto for Raspberry-Pi »
● Co-Auteur Open Silicium
● « FOSS » enthusiast
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
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
...
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 !
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 !
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
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, ...)
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
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
...
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)
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
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)
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
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>
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
17
Qt5 : QtCreator
● Création du Kit (Outils > Options > Compiler et Exécuter)
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 ?
19
Qt5 : Build System
● Buildroot
– $ make freescale_imx6qsabresd_defconfig
– $ make xconfig
– Notion de firmware
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 \
"
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
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
23
Démo 2
● Pour intégrer le module buletooth
QT += core bluetooth
24
Conclusion
● https://github.com/texierp/meetup_linux-embedded_bdx/tree/master/18-Octobre/Qt5