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