qt4 et 5 pour linux embarqué

29
Qt 4 et 5 pour Linux embarqué Pierre FICHEUX, [email protected]

Upload: openwide

Post on 29-Nov-2014

284 views

Category:

Engineering


7 download

DESCRIPTION

Qt4 et 5 pour Linux embarqué

TRANSCRIPT

Page 1: Qt4 et 5 pour Linux embarqué

Qt 4 et 5 pour Linux embarquéPierre FICHEUX, [email protected]

Page 2: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Qt, histoire

● Première version publiée par Trolltech en 1996 → toolkit en C++

● Développé pour X11, 2 développeurs au départ, fondateurs de Trolltech

● Outil multi-plateforme (Unix, Windows, MacOS)● Connu grâce à KDE !● Qt2 en 2000 → Qtopia (PDA sous Linux « Zaurus » de

SHARP)● Jusqu’en 2008, double licence GPL/Propriétaire● En 2008, achat par Nokia → LGPL● Qt4 → + Symbian, WinCE, Maemo, ...● En 2011 rapprochement Nokia / M$ → cédé à Digia en

2012● Sortie de Qt 5.0 fin 2012 (Digia)

Page 3: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Architecture Qt4

Page 4: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Architecture Qt4, suite

Page 5: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Qt5, quoi de neuf ?

● Plus de plate-formes supportées → mobile, Wayland● Nouvelle architecture, modularité améliorée● Plus de partage de code avec QPA (Qt Platform

Abstraction)● Empreinte mémoire plus faible● Au niveau utilisateur, code compatible avec Qt 4● Contraintes matérielles plus importantes (accélération

OpenGL)● Qt Quick 2● Installation plus complexe sur cible embarquée

« exotique »

Page 6: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

QtCore

QtNetwork QtGui

QtQml QtQuick

QtMultiMediaQtTest QtSql

QtWebkit

Principaux modules Qt5

Partie IHM

Page 7: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

QPA (Qt platform abstraction)

Win Mac Wayland SymbianX11 …Android

QAccessible

QFont

QPainter

QImageQOpenGL …

QWindow QScreen

QSurface

QInputMethodQOpenGLContext

Scene graph (in qtdeclarative) QBackingStor

e

QWidgetQtWebkitQtQuick2 QtQuick1

Qt5 / QtGui

Page 8: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Qt/Embedded architecture

● Basé par défaut sur le framebuffer de Linux (LinuxFB)● Client/serveur → QWS = Qt Window System (supprimé

en Qt5)● Pas d'accélération matérielle● Peut utiliser un framebuffer « virtuel » (X11) avec QVFb● Une application serveur (-qws), les autres clientes● Le serveur gère en général l’affichage mais l’application

peut accéder directement à l’écran pour des raisons de performances

● Configuration par défaut pour l'embarqué « léger » → remplacé par X11 / OpenGL sur Qt5 (EGLFS)

Page 9: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Principe de QWS

Page 10: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Compilation de Qt/E

● Basée sur qmake (outils similaire à GNU/Autotools ou CMake)

● Définition de l'environnement croisé dans le répertoire mkspecs (GCC, etc.).

● Peu de différences entre Qt4 et Qt5$ ./configure -embedded arm -xplatform qws/linux-arm-g++

$ ./configure -xplatform linux-arm-none-gnueabi-g++

$ make; make install

● Intégré à Buildroot et Yocto/OpenEmbedded → plus simple

Qt5

Qt4

Page 11: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Test de Qt4/QWS

● Compilation avec Buildroot● Premier test possible avec Raspberry Pi ou QEMU

(LinuxFB / QWS)$ make raspberrypi_qt4_defconfig

$ make qemu_arm_versatile_2630_qt4_defconfig

● Test avec QEMU$ qemu-system-arm -M versatilepb -m 128 -kernel zImage -initrd rootfs.cpio.gz -append "mem=128M"

● Nombreux programmes de test dans les répertoires demos et examples

● Ne pas oublier l’option -qws !# cd /usr/share/qt/examples/widgets

# ./analogclock/analogclock -qws

# ./wiggly/wiggly -qws

Page 12: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Configuration des entrées

● On utilise en général un écran tactile → calibration● L'écran tactile nécessite :

– Pilote noyau → /dev/input/eventX

– evtest → test d'événement « bas niveau »

– TSLIB → plugins pour les différents écrans + outil de calibration ts_calibrate

● Exemple avec BB Black# evtest

No device specified, trying to scan all of /dev/input/event*

Available devices:

/dev/input/event0: tps65217_pwr_but

/dev/input/event1: ti-tsc

/dev/input/event2: gpio_keys.13

Page 13: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Configuration des entrées, suite

● Calibration par ts_calibrate# export TSLIB_TSDEVICE=/dev/input/event1

# export TSLIB_FBDEVICE=/dev/fb1

# ts_calibrate

● Crée le fichier /etc/pointercal

Page 14: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Utilisation avec Qt4/QWS

● On utilise quelques variables d'environnement# export QWS_MOUSE_PROTO=tslib:/dev/input/event1

# export QWS_DISPLAY=linuxfb:/dev/fb1

# /usr/share/qt/examples/widgets/sliders/sliders -qws

● Suite sur : http://doc.qt.digia.com/4.6/qt-embedded-envvars.html

Page 15: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Qt/E, exemple Webkit

Page 16: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Qt/E, exemple qtdemo

Page 17: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Test Qt5/OpenGL (EGLFS)

● Construction avec Buildroot$ make distclean

$ make raspberrypi_qt5_defconfig

$ make

● Test sur la carte RPi# /usr/lib/qt/examples/gui/openglwindow/openglwindow

Page 18: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Développement multi-plateforme

● Le même code source est utilisable sur les différentes plateformes grâce à qmake

● Linux/X11$ qmake && make

$ ./QThread_ex

● Linux/QWS$ make distclean

$ export PATH=<BR path>/output/host/usr/bin:$PATH

$ qmake && make

...

# QThread_ex -qws

Page 19: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Consommation mémoire

● LE point faible de Qt● Consommation de l’exemple analogclock: 20 Mo● Consommation de webkit: 50 Mo● Consommation d’une démonstration DirectFB

(df_andi) : 2 Mo● Qt est destiné au développement d’applications

« complexes »● Amélioration dans Qt5 (?)

Page 20: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Environnement de développement

● Qt est PLUS qu’un toolkit graphique !● Abstraction pour sockets, threads, Unicode, SQL, ...● Les objets dérivent de QObject mais ne sont pas

uniquement des objets graphiques, ex: QThread● Les « signaux/slots » remplacent avantageusement les

callbacks● Prise en compte I18N● Chargement dynamique d’IHM

Page 21: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

QtCreator

● Outil WYSIWYG de création d’interface● IDE de développement semblable à Eclipse

– Edition du code

– Compilation (croisée)

– Mise au point (GDB)

● Les fichier d’IHM Qt (.ui) sont au format XML● Permet de définir des cibles X11, embedded, etc.

Page 22: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

QtCreator, suite

Page 23: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

QtCreator, suite

Sélection SDK

Page 24: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Signaux/slots

● Callback → un événement <=> une fonction● Qt : Un signal (ex: clic bouton) est reçu par plusieurs

« slots » après connexion (voir exemple QThread_ex)

Page 25: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Prise en compte I18N

● I18N = Internationalization● Message extraits du code source (.cpp) → .ts (XML)● Traduction avec Qt Linguist en compilé en .qm

Page 26: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Qt Linguist

Page 27: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Qt Quick

● Programmation dynamique d'interface basée sur le langage QML (Qt Modeling/Meta Language)

● QML est basé sur JavaScript● Intégré à QtCreator● Intégrable au code Qt existant● Fonctionnellement « semblable » à HTML5 ?● Qt Quick 1.1 dans Qt4 (4.7 et plus)● Qt Quick 2 dans Qt5 → optimisé pour OpenGL

Page 28: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Comparaison QML 1/2

Page 29: Qt4 et 5 pour Linux embarqué

NOM CLIENT

Qt pour Linux embarqué 6/2014

Bibliographie

● http://fr.slideshare.net/zblair/brief-introtoqt● http://fr.slideshare.net/yinyunqiao/qt5● http://fr.slideshare.net/thiagomacieira/qtprojectorg-and-

qt-5● http://www.ics.com/blog/building-qt-and-qtwayland-

raspberry-pi● http://doc-snapshot.qt-project.org/qt5-dev/embedded-

linux.html#eglfshttp://qt-project.org/doc