qt5 embedded

Post on 13-Apr-2017

196 Views

Category:

Engineering

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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 :

$ ./my­qt5­app ­platform linuxfb (par défaut : /dev/fb0)

$ ./my­qt5­app ­platform linuxfb:fb=/dev/fb2

ou encore

$ ./my­qt5­app ­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 :

$ ./my­qt5­app ­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 <qt­sources>/qtbase/mkspecs/devices/

● Prenons l'exemple pour linux­imx6­g++

● L'étape du « configure » => mais aucun rapport avec les Autotools !

$ ./configure ­v ­release \

­device linux­imx6­g++ \

­device­option CROSS_COMPILE=<toolchain­path> \

­sysroot <rootfs­path> \

­prefix <install­path>

16

Qt5 : Compilation de Qt 2/2Configure summary

Building on:   linux­g++ (x86_64, CPU features: mmx sse sse2)

Building for:  devices/linux­imx6­g++ (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 meta­qt5 (fichier bblayers.conf)

→ https://github.com/meta-qt5/meta-qt5

– Pour générer une toochain générique :

$ bitbake meta­toolchain­qt5

● 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

25

Questions ?

Contact : texier.pj2@gmail.com

top related