SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
Qt 4 et 5 pour Linux embarqué
Pierre FICHEUX, pierre.ficheux@openwide.fr
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)
NOM
CLIENT
Qt pour Linux embarqué 6/2014
Architecture Qt4
NOM
CLIENT
Qt pour Linux embarqué 6/2014
Architecture Qt4, suite
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 »
NOM
CLIENT
Qt pour Linux embarqué 6/2014
QtCore
QtNetwork QtGui
QtQml QtQuick
QtMultiMedia
QtTest QtSql
QtWebkit
Principaux modules Qt5
Partie IHM
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) QBacki
ngStor
e
QWidgetQtWebkitQtQuick2 QtQuick1
Qt5 / QtGui
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)
NOM
CLIENT
Qt pour Linux embarqué 6/2014
Principe de QWS
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
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
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
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
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
NOM
CLIENT
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)
● Construction avec Buildroot
$ make distclean
$ make raspberrypi_qt5_defconfig
$ make
● Test sur la carte RPi
# /usr/lib/qt/examples/gui/openglwindow/openglwindow
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
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 (?)
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
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.
NOM
CLIENT
Qt pour Linux embarqué 6/2014
QtCreator, suite
NOM
CLIENT
Qt pour Linux embarqué 6/2014
QtCreator, suite
Sélection SDK
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)
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
NOM
CLIENT
Qt pour Linux embarqué 6/2014
Qt Linguist
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
NOM
CLIENT
Qt pour Linux embarqué 6/2014
Comparaison QML 1/2
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

Más contenido relacionado

La actualidad más candente

Chroniques de formation : Scaling Code Labs avec Swarm et Compose
Chroniques de formation : Scaling Code Labs avec Swarm et ComposeChroniques de formation : Scaling Code Labs avec Swarm et Compose
Chroniques de formation : Scaling Code Labs avec Swarm et ComposeDamien Duportal
 
Introduction à Qt QML
Introduction à Qt QMLIntroduction à Qt QML
Introduction à Qt QMLLionel Duboeuf
 
Présentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitPrésentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitIppon
 
Meetup XVRRAA #2 : Les news de l'open source
Meetup XVRRAA #2 : Les news de l'open sourceMeetup XVRRAA #2 : Les news de l'open source
Meetup XVRRAA #2 : Les news de l'open sourceYannick Comte
 
Réalité virtuelle + Open source = &lt;3
Réalité virtuelle + Open source = &lt;3Réalité virtuelle + Open source = &lt;3
Réalité virtuelle + Open source = &lt;3Yannick Comte
 
Découvrez la technologie WebRTC, comment cela fonctionne?
Découvrez la technologie WebRTC, comment cela fonctionne? Découvrez la technologie WebRTC, comment cela fonctionne?
Découvrez la technologie WebRTC, comment cela fonctionne? Sylvain Boily
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Ippon
 
Déploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec RancherDéploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec RancherAnthony Sigogne
 
Road map to DevOps engineering - Elie Sirius
Road map to DevOps engineering -  Elie SiriusRoad map to DevOps engineering -  Elie Sirius
Road map to DevOps engineering - Elie SiriusGDG Bujumbura
 
Des jeux et des devops
Des jeux et des devopsDes jeux et des devops
Des jeux et des devopsFrederic Leger
 
Docker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatiqueDocker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatiquesdenier
 
Open Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnanteOpen Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnanteChristophe Villeneuve
 

La actualidad más candente (15)

Chroniques de formation : Scaling Code Labs avec Swarm et Compose
Chroniques de formation : Scaling Code Labs avec Swarm et ComposeChroniques de formation : Scaling Code Labs avec Swarm et Compose
Chroniques de formation : Scaling Code Labs avec Swarm et Compose
 
Introduction à Qt QML
Introduction à Qt QMLIntroduction à Qt QML
Introduction à Qt QML
 
Présentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitPrésentation du retour d'expérience sur Git
Présentation du retour d'expérience sur Git
 
Prototypage IoT avec logiciel/matériel libre
Prototypage IoT avec logiciel/matériel librePrototypage IoT avec logiciel/matériel libre
Prototypage IoT avec logiciel/matériel libre
 
SDN OpenDaylight
SDN OpenDaylightSDN OpenDaylight
SDN OpenDaylight
 
Meetup XVRRAA #2 : Les news de l'open source
Meetup XVRRAA #2 : Les news de l'open sourceMeetup XVRRAA #2 : Les news de l'open source
Meetup XVRRAA #2 : Les news de l'open source
 
Réalité virtuelle + Open source = &lt;3
Réalité virtuelle + Open source = &lt;3Réalité virtuelle + Open source = &lt;3
Réalité virtuelle + Open source = &lt;3
 
Découvrez la technologie WebRTC, comment cela fonctionne?
Découvrez la technologie WebRTC, comment cela fonctionne? Découvrez la technologie WebRTC, comment cela fonctionne?
Découvrez la technologie WebRTC, comment cela fonctionne?
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014
 
Git développez autrement
Git développez autrementGit développez autrement
Git développez autrement
 
Déploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec RancherDéploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec Rancher
 
Road map to DevOps engineering - Elie Sirius
Road map to DevOps engineering -  Elie SiriusRoad map to DevOps engineering -  Elie Sirius
Road map to DevOps engineering - Elie Sirius
 
Des jeux et des devops
Des jeux et des devopsDes jeux et des devops
Des jeux et des devops
 
Docker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatiqueDocker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatique
 
Open Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnanteOpen Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnante
 

Similar a Qt4 et 5 pour Linux embarqué

Etat de l'art des systèmes embarqués, utilisation du logiciel libre
Etat de l'art des systèmes embarqués, utilisation du logiciel libreEtat de l'art des systèmes embarqués, utilisation du logiciel libre
Etat de l'art des systèmes embarqués, utilisation du logiciel librePierre Ficheux
 
Open Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarquesOpen Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarquesAlexandre LAHAYE
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...XavierPestel
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?Membré Guillaume
 
OpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse FaureOpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse FaureParis Container Day
 
Organiser son CI/CD - présentation
Organiser son CI/CD - présentation Organiser son CI/CD - présentation
Organiser son CI/CD - présentation Julien Garderon
 
Virt lightning-montreal-linux-meetup-2020-02
Virt lightning-montreal-linux-meetup-2020-02Virt lightning-montreal-linux-meetup-2020-02
Virt lightning-montreal-linux-meetup-2020-02Gonéri Le Bouder
 
Openshift 3 & Kubernetes
Openshift 3 & KubernetesOpenshift 3 & Kubernetes
Openshift 3 & KubernetesPerfect Memory
 
Virtualisation et intégration des applications d'entreprise en environnement ...
Virtualisation et intégration des applications d'entreprise en environnement ...Virtualisation et intégration des applications d'entreprise en environnement ...
Virtualisation et intégration des applications d'entreprise en environnement ...Kouotou Aboubakar Sidiki, Eng, PMP
 
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...OpenNebula Project
 
Tv21 02-07 linuxembedded
Tv21 02-07 linuxembeddedTv21 02-07 linuxembedded
Tv21 02-07 linuxembeddedPascal Flamand
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...MSDEVMTL
 
Keynote .NET 2015 : une nouvelle ère
Keynote .NET 2015 : une nouvelle èreKeynote .NET 2015 : une nouvelle ère
Keynote .NET 2015 : une nouvelle èreMicrosoft
 
LINUX : Système, administration et services réseaux
LINUX : Système, administration et services réseauxLINUX : Système, administration et services réseaux
LINUX : Système, administration et services réseauxTaoufik AIT HSAIN
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Parischristophep21
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Microsoft
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipelineNicolas wallerand
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 

Similar a Qt4 et 5 pour Linux embarqué (20)

Etat de l'art des systèmes embarqués, utilisation du logiciel libre
Etat de l'art des systèmes embarqués, utilisation du logiciel libreEtat de l'art des systèmes embarqués, utilisation du logiciel libre
Etat de l'art des systèmes embarqués, utilisation du logiciel libre
 
Open Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarquesOpen Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarques
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
 
OpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse FaureOpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse Faure
 
A Libre Ouvert : Virtual box
A Libre Ouvert : Virtual boxA Libre Ouvert : Virtual box
A Libre Ouvert : Virtual box
 
Organiser son CI/CD - présentation
Organiser son CI/CD - présentation Organiser son CI/CD - présentation
Organiser son CI/CD - présentation
 
Démo puppet et état du projet
Démo puppet et état du projetDémo puppet et état du projet
Démo puppet et état du projet
 
Virt lightning-montreal-linux-meetup-2020-02
Virt lightning-montreal-linux-meetup-2020-02Virt lightning-montreal-linux-meetup-2020-02
Virt lightning-montreal-linux-meetup-2020-02
 
Openshift 3 & Kubernetes
Openshift 3 & KubernetesOpenshift 3 & Kubernetes
Openshift 3 & Kubernetes
 
Virtualisation et intégration des applications d'entreprise en environnement ...
Virtualisation et intégration des applications d'entreprise en environnement ...Virtualisation et intégration des applications d'entreprise en environnement ...
Virtualisation et intégration des applications d'entreprise en environnement ...
 
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
Déploiement pour l’hébergement d’architecture cliente et mise en place du Sel...
 
Tv21 02-07 linuxembedded
Tv21 02-07 linuxembeddedTv21 02-07 linuxembedded
Tv21 02-07 linuxembedded
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
 
Keynote .NET 2015 : une nouvelle ère
Keynote .NET 2015 : une nouvelle èreKeynote .NET 2015 : une nouvelle ère
Keynote .NET 2015 : une nouvelle ère
 
LINUX : Système, administration et services réseaux
LINUX : Système, administration et services réseauxLINUX : Système, administration et services réseaux
LINUX : Système, administration et services réseaux
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Paris
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipeline
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 

Más de Alexandre LAHAYE

Building RT image with Yocto
Building RT image with YoctoBuilding RT image with Yocto
Building RT image with YoctoAlexandre LAHAYE
 
openPOWERLINK over Xenomai
openPOWERLINK over XenomaiopenPOWERLINK over Xenomai
openPOWERLINK over XenomaiAlexandre LAHAYE
 
Présentation Bluetooth Low Energy - SMILE ECS
Présentation Bluetooth Low Energy - SMILE ECSPrésentation Bluetooth Low Energy - SMILE ECS
Présentation Bluetooth Low Energy - SMILE ECSAlexandre LAHAYE
 
Les solutions libres pour les systèmes embarqués
Les solutions libres pour les systèmes embarquésLes solutions libres pour les systèmes embarqués
Les solutions libres pour les systèmes embarquésAlexandre LAHAYE
 
Les technologies Open Source pour les objets connectés
Les technologies Open Source pour les objets connectésLes technologies Open Source pour les objets connectés
Les technologies Open Source pour les objets connectésAlexandre LAHAYE
 
Les technologies Open Source pour les objets connectés
Les technologies Open Source pour les objets connectésLes technologies Open Source pour les objets connectés
Les technologies Open Source pour les objets connectésAlexandre LAHAYE
 
Open Wide : les licences libres.
Open Wide : les licences libres. Open Wide : les licences libres.
Open Wide : les licences libres. Alexandre LAHAYE
 
OPEN WIDE : L’open source pour les systemes embarques Temps reel
OPEN WIDE : L’open source pour les systemes embarques Temps reelOPEN WIDE : L’open source pour les systemes embarques Temps reel
OPEN WIDE : L’open source pour les systemes embarques Temps reelAlexandre LAHAYE
 

Más de Alexandre LAHAYE (11)

Building RT image with Yocto
Building RT image with YoctoBuilding RT image with Yocto
Building RT image with Yocto
 
openPOWERLINK over Xenomai
openPOWERLINK over XenomaiopenPOWERLINK over Xenomai
openPOWERLINK over Xenomai
 
Présentation Bluetooth Low Energy - SMILE ECS
Présentation Bluetooth Low Energy - SMILE ECSPrésentation Bluetooth Low Energy - SMILE ECS
Présentation Bluetooth Low Energy - SMILE ECS
 
Les solutions libres pour les systèmes embarqués
Les solutions libres pour les systèmes embarquésLes solutions libres pour les systèmes embarqués
Les solutions libres pour les systèmes embarqués
 
Les technologies Open Source pour les objets connectés
Les technologies Open Source pour les objets connectésLes technologies Open Source pour les objets connectés
Les technologies Open Source pour les objets connectés
 
Les technologies Open Source pour les objets connectés
Les technologies Open Source pour les objets connectésLes technologies Open Source pour les objets connectés
Les technologies Open Source pour les objets connectés
 
Android pour l'industrie
Android pour l'industrieAndroid pour l'industrie
Android pour l'industrie
 
Yocto oe
Yocto oeYocto oe
Yocto oe
 
Plateformes embarquées
Plateformes embarquéesPlateformes embarquées
Plateformes embarquées
 
Open Wide : les licences libres.
Open Wide : les licences libres. Open Wide : les licences libres.
Open Wide : les licences libres.
 
OPEN WIDE : L’open source pour les systemes embarques Temps reel
OPEN WIDE : L’open source pour les systemes embarques Temps reelOPEN WIDE : L’open source pour les systemes embarques Temps reel
OPEN WIDE : L’open source pour les systemes embarques Temps reel
 

Qt4 et 5 pour Linux embarqué

  • 1. Qt 4 et 5 pour Linux embarqué Pierre FICHEUX, pierre.ficheux@openwide.fr
  • 2. 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)
  • 3. NOM CLIENT Qt pour Linux embarqué 6/2014 Architecture Qt4
  • 4. NOM CLIENT Qt pour Linux embarqué 6/2014 Architecture Qt4, suite
  • 5. 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 »
  • 6. NOM CLIENT Qt pour Linux embarqué 6/2014 QtCore QtNetwork QtGui QtQml QtQuick QtMultiMedia QtTest QtSql QtWebkit Principaux modules Qt5 Partie IHM
  • 7. 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) QBacki ngStor e QWidgetQtWebkitQtQuick2 QtQuick1 Qt5 / QtGui
  • 8. 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)
  • 9. NOM CLIENT Qt pour Linux embarqué 6/2014 Principe de QWS
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. NOM CLIENT Qt pour Linux embarqué 6/2014 Qt/E, exemple Webkit
  • 16. NOM CLIENT Qt pour Linux embarqué 6/2014 Qt/E, exemple qtdemo
  • 17. 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
  • 18. 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
  • 19. 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 (?)
  • 20. 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
  • 21. 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.
  • 22. NOM CLIENT Qt pour Linux embarqué 6/2014 QtCreator, suite
  • 23. NOM CLIENT Qt pour Linux embarqué 6/2014 QtCreator, suite Sélection SDK
  • 24. 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)
  • 25. 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
  • 26. NOM CLIENT Qt pour Linux embarqué 6/2014 Qt Linguist
  • 27. 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
  • 28. NOM CLIENT Qt pour Linux embarqué 6/2014 Comparaison QML 1/2
  • 29. 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