Qt 4 et 5 pour Linux embarqué

Transcription

Qt 4 et 5 pour Linux embarqué
Qt 4 et 5 pour Linux embarqué
Pierre FICHEUX, [email protected]
Qt, histoire
NOM
●
●
●
●
●
●
●
●
●
●
CLIENT
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)
Qt pour Linux embarqué 6/2014
ArchitectureNOM
Qt4
CLIENT
Qt pour Linux embarqué 6/2014
Architecture Qt4, NOM
suite
CLIENT
Qt pour Linux embarqué 6/2014
Qt5, quoi de neuf
NOM?
CLIENT
●
●
●
●
●
●
●
●
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 »
Qt pour Linux embarqué 6/2014
Principaux modulesNOM
Qt5
CLIENT
QtWebkit
QtMultiMedia
QtTest
QtSql
QtQuick
QtQml
QtGui
QtNetwork
QtCore
Partie IHM
Qt pour Linux embarqué 6/2014
Qt5 / QtGui
NOM
CLIENT
QtQuick2
QtWebkit
Scene graph (in qtdeclarative)
QOpenGL
QSurface
QWindow
QScreen
QOpenGLContext
QtQuick1
QBacki
ngStor
e
QWidget
QPainter
QFont
QAccessible
QImage
…
QInputMethod
QPA (Qt platform abstraction)
Win
Mac
Wayland
X11
Symbian
Qt pour Linux embarqué 6/2014
Android
…
Qt/Embedded architecture
NOM
CLIENT
●
●
●
●
●
●
●
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)
Qt pour Linux embarqué 6/2014
Principe de QWS
NOM
CLIENT
Qt pour Linux embarqué 6/2014
Compilation deNOM
Qt/E
CLIENT
●
●
●
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
●
Qt4
Qt5
Intégré à Buildroot et Yocto/OpenEmbedded → plus
simple
Qt pour Linux embarqué 6/2014
Test de Qt4/QWS
NOM
CLIENT
●
●
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
Qt pour Linux embarqué 6/2014
Configuration des entrées
NOM
CLIENT
●
●
●
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
Qt pour Linux embarqué 6/2014
Configuration des entrées, NOM
suite
●
Calibration par ts_calibrate
# export TSLIB_TSDEVICE=/dev/input/event1
# export TSLIB_FBDEVICE=/dev/fb1
# ts_calibrate
●
Crée le fichier /etc/pointercal
Qt pour Linux embarqué 6/2014
CLIENT
Utilisation avec Qt4/QWS
NOM
CLIENT
●
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
Qt pour Linux embarqué 6/2014
Qt/E, exemple Webkit
NOM
CLIENT
Qt pour Linux embarqué 6/2014
Qt/E, exemple qtdemo
NOM
CLIENT
Qt pour Linux embarqué 6/2014
Test Qt5/OpenGL (EGLFS)
NOM
CLIENT
●
Construction avec Buildroot
$ make distclean
$ make raspberrypi_qt5_defconfig
$ make
●
Test sur la carte RPi
# /usr/lib/qt/examples/gui/openglwindow/openglwindow
Qt pour Linux embarqué 6/2014
Développement multi-plateforme
NOM
CLIENT
●
●
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
Qt pour Linux embarqué 6/2014
Consommation mémoire
NOM
CLIENT
●
●
●
●
●
●
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 (?)
Qt pour Linux embarqué 6/2014
Environnement de développement
NOM
CLIENT
●
●
●
●
●
●
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
Qt pour Linux embarqué 6/2014
QtCreator
NOM
CLIENT
●
●
●
●
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.
Qt pour Linux embarqué 6/2014
QtCreator, NOM
suite
CLIENT
Qt pour Linux embarqué 6/2014
QtCreator, NOM
suite
CLIENT
Sélection SDK
Qt pour Linux embarqué 6/2014
Signaux/slots
NOM
CLIENT
●
●
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)
Qt pour Linux embarqué 6/2014
Prise en compteNOM
I18N
CLIENT
●
●
●
I18N = Internationalization
Message extraits du code source (.cpp) → .ts (XML)
Traduction avec Qt Linguist en compilé en .qm
Qt pour Linux embarqué 6/2014
Qt Linguist
NOM
CLIENT
Qt pour Linux embarqué 6/2014
Qt Quick
NOM
CLIENT
●
●
●
●
●
●
●
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
Qt pour Linux embarqué 6/2014
Comparaison QML
1/2
NOM
CLIENT
Qt pour Linux embarqué 6/2014
Bibliographie
NOM
CLIENT
●
●
●
●
●
http://fr.slideshare.net/zblair/brief-introtoqt
http://fr.slideshare.net/yinyunqiao/qt5
http://fr.slideshare.net/thiagomacieira/qtprojectorg-andqt-5
http://www.ics.com/blog/building-qt-and-qtwaylandraspberry-pi
http://doc-snapshot.qt-project.org/qt5-dev/embeddedlinux.html#eglfshttp://qt-project.org/doc
Qt pour Linux embarqué 6/2014