SlideShare une entreprise Scribd logo
1Android pour l’industrie
Android pour l’industrie
Pierre Ficheux (pierre.ficheux@openwide.fr)
Octobre 2013
2Android pour l’industrie
Ecosystème
● Environ 1,5 M d'activations par jour, plus d’un milliard
de téléphones depuis l’été 2013 !
● 1M d'applications sur Google Play (Android market)
● 75 % du marché des smartphones (17% pour iOS)
● Répartition des versions :
3Android pour l’industrie
Android et l'industrie ?
● Android est conçu pour la téléphonie + tablettes
● Les projets industriels abandonnent les RTOS
propriétaires pour Linux (embarqué)
● Le développement sous Linux (embarqué) est
complexe
– Souvent C/C++ (Qt)
– Outils hétérogènes
● Android nécessite (souvent) une adaptation pour
l’utilisation industrielle
● Typologie des projets
– Avec ou sans temps réel « dur »
– Avec ou sans interfaces graphique (headless)
● Android n’est pas une solution universelle !
4Android pour l’industrie
Android, open source project ?
● Le monde de la téléphonie est peu enclin à utiliser du
logiciel libre
● Les sources d'Android sont disponibles via AOSP →
adaptation possible ou BSP constructeur :)
● En pratique, Android ne suit pas les règles de
fonctionnement des projets libres
– Développements réalisés « behind de doors »
– Nombreux projets « non officiels », comme Android-
x86
– Nombreux développements spécifiques (et
propriétaires) réalisés par/pour les constructeurs
– Si possible, Google évite les composants sous GPL
→ ré-écriture + licence Apache 2
● Départ à l’été 2013 du leader du projet (JBQ) !!
5Android pour l’industrie
Licences
● Android est constitué de nombreux composants
– Noyau Linux (GPL)
– Composants Google (Apache 2)
– Composants externes (user space) souvent GPL
– Propriétaires (pilotes binaires)
● Les applications de Google Play (Android Market) sont
pour la plupart propriétaires (idem AppStore) → non
disponibles dans les sources d’Android
6Android pour l’industrie
La licence GPL en bref
● La GPL a pour origine le projet GNU de la Free
Software Foundation (Richard M. Stallman)
● GPL = General Public License
● Intègre la notion de « copyleft » (vs « copyright »)
● La GPL v2 (1991) est la plus répandue (exemple :
noyau Linux)
● Principes :
1. La licence s'applique uniquement en cas de
redistribution
2. Un code source utilisant du code GPL est du travail
dérivé et doit être publié (i.e. celui qui reçoit la
version binaire peut obtenir le code source)
3. Pas de lien (ld) possible entre du code GPL et du
code « propriétaire » !
7Android pour l’industrie
Licence Apache 2
● Fournie par ASF en 2004
● Proche des licences BSD et MIT
● Principale différence avec la GPL/LGPL : pas de
« copyleft » (dérivation) → pas de publication du code
● Pour plus d'information voir :
– http://source.android.com/source/licenses.html
– http://www.apache.org/licenses/LICENSE-2.0.html
8Android pour l’industrie
Architecture générale (Google)
9Android pour l’industrie
Le noyau Linux (rouge)
● Assure l'interface matérielle
● Différent du noyau standard nommé « mainline » et
disponible sur http://www.kernel.org
– Nouveau système d'IPC (Inter Process Comm.)
– Gestion d'énergie améliorée
– Système trace (logs)
● Initialement (et toujours) un « fork » du noyau
● Pilotes retirées du noyau officiel en 2009
● De retour sur drivers/staging/android depuis le
3.3
● Convergence (partielle) avec le mainline en cours
● Google est contributeur par nécessité, choix
pragmatique
● Noyau binaire fourni par défaut dans AOSP
10Android pour l’industrie
Bibliothèques + HAL (vert)
● Bibliothèques spécifiquesGoogle ou externes
● Spécifiques :
– Bionic, libC « allégée » sous licence BSD,
partiellement POSIX → difficulté de portage de
code « legacy »
– Surface Manager, Audio Manager, ...
● Externes (sources fournies par Google dans AOSP) :
– Webkit
– OpenSSL
– …
● Hardware abstraction layer → accès aux pilotes noyau
– Graphique, audio, Wi-Fi, ...
– Pas d'accès direct au noyau (différent de
GNU/Linux)
11Android pour l’industrie
HAL
● Pour chaque « service » on a
– Un System service (Java)
– Une définition dans la HAL (interface matérielle) +
pilote noyau
● Le constructeur doit fournir une bibliothèque (.so)
externe à AOSP (sous licence propriétaire) → à ajouter
au répertoire /device
● Le pilote noyau – également fourni par le constructeur -
reste sous GPL
● Voir un exemple sur
http://www.opersys.com/blog/extending-android-hal
12Android pour l’industrie
Architecture HAL
/frameworks/base/services/java/
/frameworks/base/services/jni/
/hardware/libhardware/
/device/[MANUF.]/[DEVICE]
/sdk/emulator/
Noyau ou module
/frameworks/base/core/
AOSP-provided
ASL
Manuf.-provided
Manuf. license
Manuf.-provided
GPL-license
Schéma K. Yaghmour
Répertoires AOSP
13Android pour l’industrie
Android runtime (jaune)
● Dalvik, LA JVM de Google
– Grosse valeur ajoutée au niveau performances
– Syntaxe Java
– Optimisée pour l'embarqué
– Non compatible avec JDK Oracle, utilise des
fichier .dex
– .dex produit à partir du .class par dex →
encombrement divisé par 2
● Les « core libraries » venant du projet Apache Harmony
remplacent les « JDK libs » pour le runtime
● Contient également des scripts et binaires nécessaires au
démarrage (ramdisk initial) dont Zygote qui démarre Dalvik
14Android pour l’industrie
Android framework (bleu)
● Correspond à l'API fournie aux développeurs pour
écrire les applications
● Majoritairement écrit en Java
● Utilisation de JNI pour l'accès aux couches basses
(C/C++) depuis une application
● La communication utilise Binder, une couche IPC
écrite par Google en remplacement des IPC
UNIX/POSIX
15Android pour l’industrie
Architecture générale (K. Yaghmour)
Schéma K. Yaghmour
16Android pour l’industrie
AOSP, introduction
● AOSP = Android Open Source Project
● Accessible sur http://source.android.com
● Sources pour les plate formes de référence
– Émulateur goldfish
– Nexus 4, 7, 10
– Pandaboard (carte ARM)
– Certains Galaxy Nexus
→ http://source.android.com/source/building-devices.html
● Bonne documentation
● AOSP utilise aussi des composants propriétaires
(exemple : pilotes graphiques)
https://developers.google.com/android/nexus/drivers
● Les sources représentent plusieurs centaines de
dépôts Git (1 par projet) et plus de 16 Go !
17Android pour l’industrie
AOSP, pré-requis
● Nombreux pré-requis pour la compilation AOSP (rien à
voir avec Linux embarqué)
● Machine (puissante) 64 bits sous Linux ou Mac OS X
(pas de Windows !)
● 4 Go de RAM, 100 Go de disque
● SMP conseillé
● Distribution Ubuntu 10.04 LTS ou éventuellement 12.04
● Quelques paquets à installer
● Utilisation de VM déconseillée (mais fonctionne)
● Java 6 → JDK 6.1
● Largement basé sur GNU Make
● La procédure d'initialisation est décrite sur :
http://source.android.com/source/initializing.html
18Android pour l’industrie
AOSP « in a nutshell »
● Google fournit l'outil repo (un script Python) afin de
gérer les nombreux dépôts Git
● Cet outil utilise un fichier manifest pour indexer les
dépôts
$ mkdir work && cd work
$ repo init -u https://android.googlesource.com/platform/manifest
[-b <branch>]
$ repo sync [-j N]
● Sélection de la cible, compilation et test
$ source build/envsetup.sh
$ lunch aosp_arm-eng
$ make -j N
$ emulator [-show-kernel -shell] &
synchronisation avec le dépôt, N jobs
chargement des variables
cible émulateur (goldfish) + mise au point (eng)
sélection de la branche, exemple android-4.3_r2
19Android pour l’industrie
Les cibles AOSP
● Différentes cibles dans le menu lunch (4.3)
Lunch menu... pick a combo:
1. aosp_arm-eng
2. aosp_x86-eng
3. aosp_mips-eng
4. vbox_x86-eng
5. aosp_deb-userdebug
6. aosp_flo-userdebug
7. ...
12. full_mako-userdebug
13. full_maguro-userdebug
14. full_manta-userdebug
15. full_arndale-userdebug
16. full_toroplus-userdebug
17. full_toro-userdebug
18. full_panda-userdebug
● Différents type de build
– user (production)
– userdebug (production + accès root + debug)
– eng (développement)
Nexus 4
Goldfish
Pandaboard
x86
20Android pour l’industrie
Écran de l'émulateur
● Déverrouiller l'écran en « tirant » le cadenas vers
l'extérieur
21Android pour l’industrie
Remarques sur AOSP
● Les sources occupent environ 16 Go (pour JB) car
Google fournit l'intégralité, y compris les composants
externes
● Grosse différence avec GNU/Linux (Buildroot, OE, …)
qui obtiennent les paquets à partir des dépôts et
appliquent des « patch »
● Le système de construction est rudimentaire, rien à voir
avec GNU/Linux !
● Après compilation, le répertoire occupe 40 Go
● Les binaires sont produits sur le répertoire out et
indexés sur le nom de la cible
$ ls -1 out/target/product
generic
panda
cible émulateur (goldfish)
22Android pour l’industrie
Noyau Linux/Android
● Le noyau Linux n'est pas conçu au départ pour la
téléphonie
– Gestion d'énergie :-(
– Mise en veille
– IPC System V → « old style »
– Gestion de mémoire / processus (context switch)
● Modifications par Google
– Wakelocks
– Binder
– Klogger
– Ashmem
– Alarm timers
– Low memory killer
23Android pour l’industrie
Noyau Linux/Android, suite.
● Les pilotes Android sont dans drivers/staging → pas
intégrés au mainline
● Retirés en décembre 2009, ré-intégrés dans la version
3.3
● Effort de convergence sur les versions récentes
● Bonne compatibilité de l’API noyau Linux (modules)
● Rappel : un module noyau ne suffit pas à piloter un
périphérique sous Android (HAL)
24Android pour l’industrie
SDK
● La plupart des développements Android se font en
Java
– Langage « simple », très répandu
– Très bonne performances de Dalvik
● Google fournit un SDK basé sur Eclipse → ADT
(Android Developer Tools)
– Simple à utiliser pour les développeurs Java/Win$
(mais pas forcément pour les autres)
– Approche « Visual Machin » → New Project, Next,
Next, … , Finish
● Test de l'application directement sur émulateur
● Création d'un fichier .apk installable sur n'importe
quelle cible Android
25Android pour l’industrie
Diagramme de création
26Android pour l’industrie
NDK
● Les développements C/C++ sont fait avec le NDK (pour
Native Development Kit)
– Portage de code existant, proche de POSIX
– Possibilité de développer uniquement avec NDK
(mais pas conseillé par Google)
– Plus souvent, interfaçage avec SDK par JNI (Java
Native Interface)
● Android utilise des fichiers Makefile dédiés et assez
basiques → Android.mk
● Pas de support officiel Autotools/CMake
● Le NDK contient principalement les chaînes croisées
dans toolchains et les bibliothèques (Bionic, …) dans
platforms
27Android pour l’industrie
NDK et POSIX
● La plupart des RTOS ont une API POSIX (VxWorks,
RTEMS, QNX, ...)
● Android n'est pas totalement un système POSIX car la
libC (Bionic) est simplifiée par rapport à GNU-libC
● Souvent nécessaire d'importer du code (POSIX)
existant (propriétaire ou libre) dans Android
– Porter le code en Java ?
– Utiliser NDK (plus simple en général)
● Le cas le plus fréquent est l'utilisation d'une
bibliothèque C/C++ depuis une application Java (ex :
accès pilote noyau JNI)
● Exemples fournis dans le NDK
28Android pour l’industrie
Bionic
● La libC Bionic est volontairement beaucoup plus légère
que la Glibc
The core idea behind Bionic's design is: KEEP IT
REALLY SIMPLE.
● Pas de support IPC System V (Android utilise Binder) !
● Quelques limites dans le support PThread
● Pas de support des exceptions C++
● Pas de compatibilité binaire avec la Glibc
● Support ARM et x86 uniquement
● Nécessite l'utilisation du compilateur Android (NDK)
● Voir android-ndk-rX/docs/system/libc
29Android pour l’industrie
Utilisation d’une chaîne externe ?
● Le NDK a des limitations au niveau POSIX
● Le noyau Android est un noyau Linux donc les appels
systèmes standards sont disponibles
● Une solution est d'utiliser une chaîne croisée
« standard » (exemples : CodeSourcery, ELDK, …) →
installer les bibliothèques sur la cible (en plus de
Bionic)
● Problème : intégration dans SDK
30Android pour l’industrie
Android et le temps réel
● Android n’est pas conçu au départ pour les applications
TR
● L’API POSIX est cependant disponible dans le noyau
Linux
● L’application de « patch » TR n’est pas triviale car ces
patchs sont prévus pour un noyau « mainline »
● Tests réalisés sur des tâches périodiques avec
PREEMPT-RT et Xenomai sous Android-x86 →
résultats identiques à ceux de GNU/Linux
● Test directement en mode « console »
● Voir la démonstration :)
31Android pour l’industrie
PREEMPT-RT
● Branche expérimentale pour la version 2.6 et 3.x, voir
https://rt.wiki.kernel.org
● Initié par Ingo Molnar, contributeur majeur du noyau
● Aucun lien avec « preempt-kernel » !
● Surtout utilisé sur x86 et des processeurs performants
(nécessite TSC = Time Stamp Counter)
● Fonctionne également sur ARM (9 ou plus), Nios II,
Microblaze, ...
● Nécessite un noyau « mainline » (ou proche) mais ne
sera probablement jamais intégré à la branche officielle
● Mise en place très simple (application d'un patch)
● Mêmes API de programmation que Linux standard
32Android pour l’industrie
PREEMPT-RT, suite
● Threaded interrupt model → utilisation d'un thread
noyau (donc interruptible) pour le traitement de chaque
interruption
4 2 root SW< 0 0% 0% [sirq-high/0]
5 2 root SW< 0 0% 0% [sirq-timer/0]
...
6 2 root SW< 0 0% 0% [sirq-net-tx/0]
● Prévention des inversions de priorité (par héritage)
● Timers noyau haute précision (API hrtimer)
● Réécriture complète des mécanismes de
synchronisation (spinlock → mutex)
● Le résultat est un noyau (presque) « préemptif », mais
reste un noyau Linux
● Sections critiques avec des tâches non TR
33Android pour l’industrie
Linux avec co-noyau
● Utilisation d’un noyau temps dans l’espace mémoire du
noyau Linux
● Séparation entre le composant temps-réel et Linux
– Ordonnanceur temps-réel spécifique
– Pas de dépendance sur les sections critiques Linux
● Virtualisation de la gestion d'interruptions Linux
– Routage prioritaire des IRQs vers le co-noyau
● Linux comme tâche idle du co-noyau
● Se rapproche de la technique de « para-virtualisation »
des hyperviseurs (adaptation de l'OS)
● Extensions RTLinux, RTAI, Xenomai
34Android pour l’industrie
Xenomai, architecture
● Xenomai utilise un micro-noyau (ADEOS) pour partager
le matériel avec le noyau Linux
micro-noyau
noyau TR
API TR
pilote TR
noyau Linux
35Android pour l’industrie
Domaines Xenomai
Hardware
VFS/FS ...
Pile réseau Xenomai RTOS
Adeos I-Pipe
Noyau
Code applicatif VxWorks
glibc
Xenomai
libvxworks
Code applicatif POSIX
Xenomai
libpthread
Appels système
glibc
36Android pour l’industrie
Android industriel,
avantages/inconvénients
● Avantages
– Programmation Java (simple et répandue)
– IHM évoluée
– Communauté importante
– Fait rêver les managers et les comptables (tablette =
grand public = bon marché)
● Inconvénients
– Incompatibilité POSIX
– Système de « build » AOSP rudimentaire par rapport
à GNU/Linux
– Pas réellement un projet libre ni communautaire
– Noyau Linux non standard (même si la situation
évolue)
– Interfaces matérielles spéciales mal supportées !!
37Android pour l’industrie
Conclusions
● Utiliser Android quand :
– Le projet nécessite une IHM
– Le projet ne nécessite pas de TR dur (pour l’instant)
– L’utilisation de Java est un avantage
● Attention à la dépendance / Google → quelle part
d’AOSP disponible et jusqu’à quand ?
● Android ne peut remplacer GNU/Linux embarqué
– Développement communautaire
– Support matériel
– Système de construction bien plus avancé (Yocto)
38Android pour l’industrie
Questions ?

Contenu connexe

Tendances

Créer une distribution Linux embarqué professionnelle avec Yocto Project
Créer une distribution Linux embarqué professionnelle avec Yocto ProjectCréer une distribution Linux embarqué professionnelle avec Yocto Project
Créer une distribution Linux embarqué professionnelle avec Yocto Project
Christian Charreyre
 
Open Embedded un framework libre pour assurer la cohérence de son projet
Open Embedded un framework libre pour assurer la cohérence de son projetOpen Embedded un framework libre pour assurer la cohérence de son projet
Open Embedded un framework libre pour assurer la cohérence de son projet
Christian Charreyre
 
Créer sa distribution Linux embarqué avec Yocto ou Angström
Créer sa distribution Linux embarqué avec Yocto ou AngströmCréer sa distribution Linux embarqué avec Yocto ou Angström
Créer sa distribution Linux embarqué avec Yocto ou Angström
Christian Charreyre
 
Yocto une solution robuste pour construire des applications à fort contenu ap...
Yocto une solution robuste pour construire des applications à fort contenu ap...Yocto une solution robuste pour construire des applications à fort contenu ap...
Yocto une solution robuste pour construire des applications à fort contenu ap...
Christian Charreyre
 
Concevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto ProjectConcevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto Project
Christian Charreyre
 
Séminaire Captronic Yocto 24 février 2015
Séminaire Captronic Yocto 24 février 2015Séminaire Captronic Yocto 24 février 2015
Séminaire Captronic Yocto 24 février 2015
Christian Charreyre
 
Concevoir un système Linux embarqué avec Yocto Project - Version révisée
Concevoir un système Linux embarqué avec Yocto Project - Version réviséeConcevoir un système Linux embarqué avec Yocto Project - Version révisée
Concevoir un système Linux embarqué avec Yocto Project - Version révisée
Christian Charreyre
 
Présentation Yocto - SophiaConf 2015
Présentation Yocto - SophiaConf 2015Présentation Yocto - SophiaConf 2015
Présentation Yocto - SophiaConf 2015
Christian Charreyre
 
Conference Informatique Embarquée Synergie-NTIC
Conference Informatique Embarquée Synergie-NTICConference Informatique Embarquée Synergie-NTIC
Conference Informatique Embarquée Synergie-NTIC
Christian Charreyre
 
Distro Recipes 2013 : Yocto / OpenEmbedded
Distro Recipes 2013 : Yocto / OpenEmbeddedDistro Recipes 2013 : Yocto / OpenEmbedded
Distro Recipes 2013 : Yocto / OpenEmbedded
Anne Nicolas
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Jean Gabès
 
Code d'Armor : Open Source, mode d'emploi
Code d'Armor : Open Source, mode d'emploiCode d'Armor : Open Source, mode d'emploi
Code d'Armor : Open Source, mode d'emploi
bbailleux
 
Plateformes embarquées
Plateformes embarquéesPlateformes embarquées
Plateformes embarquées
Alexandre LAHAYE
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014
Ippon
 
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
Alexandre LAHAYE
 
Java scripting api
Java scripting apiJava scripting api
Java scripting api
Franck SIMON
 
Barre pour développeur Firefox et Eclipse
Barre pour développeur Firefox et EclipseBarre pour développeur Firefox et Eclipse
Barre pour développeur Firefox et Eclipse
Yannick Pavard
 
Android NDK
Android   NDKAndroid   NDK
Android NDK
Franck SIMON
 
Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012
Jean-Marc Fontaine
 
Autotools
AutotoolsAutotools

Tendances (20)

Créer une distribution Linux embarqué professionnelle avec Yocto Project
Créer une distribution Linux embarqué professionnelle avec Yocto ProjectCréer une distribution Linux embarqué professionnelle avec Yocto Project
Créer une distribution Linux embarqué professionnelle avec Yocto Project
 
Open Embedded un framework libre pour assurer la cohérence de son projet
Open Embedded un framework libre pour assurer la cohérence de son projetOpen Embedded un framework libre pour assurer la cohérence de son projet
Open Embedded un framework libre pour assurer la cohérence de son projet
 
Créer sa distribution Linux embarqué avec Yocto ou Angström
Créer sa distribution Linux embarqué avec Yocto ou AngströmCréer sa distribution Linux embarqué avec Yocto ou Angström
Créer sa distribution Linux embarqué avec Yocto ou Angström
 
Yocto une solution robuste pour construire des applications à fort contenu ap...
Yocto une solution robuste pour construire des applications à fort contenu ap...Yocto une solution robuste pour construire des applications à fort contenu ap...
Yocto une solution robuste pour construire des applications à fort contenu ap...
 
Concevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto ProjectConcevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto Project
 
Séminaire Captronic Yocto 24 février 2015
Séminaire Captronic Yocto 24 février 2015Séminaire Captronic Yocto 24 février 2015
Séminaire Captronic Yocto 24 février 2015
 
Concevoir un système Linux embarqué avec Yocto Project - Version révisée
Concevoir un système Linux embarqué avec Yocto Project - Version réviséeConcevoir un système Linux embarqué avec Yocto Project - Version révisée
Concevoir un système Linux embarqué avec Yocto Project - Version révisée
 
Présentation Yocto - SophiaConf 2015
Présentation Yocto - SophiaConf 2015Présentation Yocto - SophiaConf 2015
Présentation Yocto - SophiaConf 2015
 
Conference Informatique Embarquée Synergie-NTIC
Conference Informatique Embarquée Synergie-NTICConference Informatique Embarquée Synergie-NTIC
Conference Informatique Embarquée Synergie-NTIC
 
Distro Recipes 2013 : Yocto / OpenEmbedded
Distro Recipes 2013 : Yocto / OpenEmbeddedDistro Recipes 2013 : Yocto / OpenEmbedded
Distro Recipes 2013 : Yocto / OpenEmbedded
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)
 
Code d'Armor : Open Source, mode d'emploi
Code d'Armor : Open Source, mode d'emploiCode d'Armor : Open Source, mode d'emploi
Code d'Armor : Open Source, mode d'emploi
 
Plateformes embarquées
Plateformes embarquéesPlateformes embarquées
Plateformes embarquées
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014
 
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
 
Java scripting api
Java scripting apiJava scripting api
Java scripting api
 
Barre pour développeur Firefox et Eclipse
Barre pour développeur Firefox et EclipseBarre pour développeur Firefox et Eclipse
Barre pour développeur Firefox et Eclipse
 
Android NDK
Android   NDKAndroid   NDK
Android NDK
 
Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012
 
Autotools
AutotoolsAutotools
Autotools
 

Similaire à Android pour l'industrie

Paug aosp ice-creamsandwich_20120119
Paug aosp ice-creamsandwich_20120119Paug aosp ice-creamsandwich_20120119
Paug aosp ice-creamsandwich_20120119
Paris Android User Group
 
Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"
Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"
Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"
Smile I.T is open
 
Les technologies Open Source pour les interfaces graphiques embarquées
Les technologies Open Source pour les interfaces graphiques embarquéesLes technologies Open Source pour les interfaces graphiques embarquées
Les technologies Open Source pour les interfaces graphiques embarquées
Alexandre LAHAYE
 
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
Pierre Ficheux
 
android.pdf
android.pdfandroid.pdf
android.pdf
med_univ78
 
Hackathon Android Abidjan
Hackathon Android  AbidjanHackathon Android  Abidjan
Hackathon Android Abidjan
Bacely YoroBi
 
Comment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open SourceComment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open Source
Christian Charreyre
 
Présentation de la pile réseau sous gnu linux
Présentation de la pile réseau sous gnu linuxPrésentation de la pile réseau sous gnu linux
Présentation de la pile réseau sous gnu linux
Thierry Gayet
 
Android distribution cyanogen mod _ guillaume lesniak, student at miage nancy
Android distribution   cyanogen mod _ guillaume lesniak, student at miage nancyAndroid distribution   cyanogen mod _ guillaume lesniak, student at miage nancy
Android distribution cyanogen mod _ guillaume lesniak, student at miage nancy
Paris Open Source Summit
 
Programmation sous Android
Programmation sous AndroidProgrammation sous Android
Programmation sous Android
Olivier Le Goaër
 
Séminaire Linagora : poste de travail Libre, décembre 2009
Séminaire Linagora : poste de travail Libre, décembre 2009Séminaire Linagora : poste de travail Libre, décembre 2009
Séminaire Linagora : poste de travail Libre, décembre 2009
LINAGORA
 
Introduction aux logiciels libres et à Linux
Introduction aux logiciels libres et à LinuxIntroduction aux logiciels libres et à Linux
Introduction aux logiciels libres et à Linux
Bruno Cornec
 
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
jihbed
 
Kit de survie pour l'IoT façon DIY
Kit de survie pour l'IoT façon DIYKit de survie pour l'IoT façon DIY
Kit de survie pour l'IoT façon DIY
laurenthuet
 
Introduction au langage de programmation Lua / Digital apéro [03/12/2014]
Introduction au langage de programmation Lua / Digital apéro [03/12/2014]Introduction au langage de programmation Lua / Digital apéro [03/12/2014]
Introduction au langage de programmation Lua / Digital apéro [03/12/2014]
Silicon Comté
 
Android 1
Android 1Android 1
Android 1
ENSAM Casablanca
 
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
Yannick Comte
 
Développement Android
Développement AndroidDéveloppement Android
Développement Android
Franck SIMON
 
Open Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarqueOpen Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarque
Alexandre LAHAYE
 
Install party
Install partyInstall party
Install party
Ghariani Tewfik
 

Similaire à Android pour l'industrie (20)

Paug aosp ice-creamsandwich_20120119
Paug aosp ice-creamsandwich_20120119Paug aosp ice-creamsandwich_20120119
Paug aosp ice-creamsandwich_20120119
 
Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"
Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"
Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"
 
Les technologies Open Source pour les interfaces graphiques embarquées
Les technologies Open Source pour les interfaces graphiques embarquéesLes technologies Open Source pour les interfaces graphiques embarquées
Les technologies Open Source pour les interfaces graphiques embarquées
 
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
 
android.pdf
android.pdfandroid.pdf
android.pdf
 
Hackathon Android Abidjan
Hackathon Android  AbidjanHackathon Android  Abidjan
Hackathon Android Abidjan
 
Comment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open SourceComment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open Source
 
Présentation de la pile réseau sous gnu linux
Présentation de la pile réseau sous gnu linuxPrésentation de la pile réseau sous gnu linux
Présentation de la pile réseau sous gnu linux
 
Android distribution cyanogen mod _ guillaume lesniak, student at miage nancy
Android distribution   cyanogen mod _ guillaume lesniak, student at miage nancyAndroid distribution   cyanogen mod _ guillaume lesniak, student at miage nancy
Android distribution cyanogen mod _ guillaume lesniak, student at miage nancy
 
Programmation sous Android
Programmation sous AndroidProgrammation sous Android
Programmation sous Android
 
Séminaire Linagora : poste de travail Libre, décembre 2009
Séminaire Linagora : poste de travail Libre, décembre 2009Séminaire Linagora : poste de travail Libre, décembre 2009
Séminaire Linagora : poste de travail Libre, décembre 2009
 
Introduction aux logiciels libres et à Linux
Introduction aux logiciels libres et à LinuxIntroduction aux logiciels libres et à Linux
Introduction aux logiciels libres et à Linux
 
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
NetBSD operating system: Clean Code, Ports, Anykernel, pkgsrc and Desktop pro...
 
Kit de survie pour l'IoT façon DIY
Kit de survie pour l'IoT façon DIYKit de survie pour l'IoT façon DIY
Kit de survie pour l'IoT façon DIY
 
Introduction au langage de programmation Lua / Digital apéro [03/12/2014]
Introduction au langage de programmation Lua / Digital apéro [03/12/2014]Introduction au langage de programmation Lua / Digital apéro [03/12/2014]
Introduction au langage de programmation Lua / Digital apéro [03/12/2014]
 
Android 1
Android 1Android 1
Android 1
 
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éveloppement Android
Développement AndroidDéveloppement Android
Développement Android
 
Open Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarqueOpen Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarque
 
Install party
Install partyInstall party
Install party
 

Plus de Alexandre LAHAYE

Building RT image with Yocto
Building RT image with YoctoBuilding RT image with Yocto
Building RT image with Yocto
Alexandre LAHAYE
 
openPOWERLINK over Xenomai
openPOWERLINK over XenomaiopenPOWERLINK over Xenomai
openPOWERLINK over Xenomai
Alexandre 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 ECS
Alexandre 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és
Alexandre 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és
Alexandre LAHAYE
 
Qt4 et 5 pour Linux embarqué
Qt4 et 5 pour Linux embarquéQt4 et 5 pour Linux embarqué
Qt4 et 5 pour Linux embarqué
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 reel
Alexandre LAHAYE
 

Plus de Alexandre LAHAYE (7)

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 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
 
Qt4 et 5 pour Linux embarqué
Qt4 et 5 pour Linux embarquéQt4 et 5 pour Linux embarqué
Qt4 et 5 pour Linux embarqué
 
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
 

Android pour l'industrie

  • 1. 1Android pour l’industrie Android pour l’industrie Pierre Ficheux (pierre.ficheux@openwide.fr) Octobre 2013
  • 2. 2Android pour l’industrie Ecosystème ● Environ 1,5 M d'activations par jour, plus d’un milliard de téléphones depuis l’été 2013 ! ● 1M d'applications sur Google Play (Android market) ● 75 % du marché des smartphones (17% pour iOS) ● Répartition des versions :
  • 3. 3Android pour l’industrie Android et l'industrie ? ● Android est conçu pour la téléphonie + tablettes ● Les projets industriels abandonnent les RTOS propriétaires pour Linux (embarqué) ● Le développement sous Linux (embarqué) est complexe – Souvent C/C++ (Qt) – Outils hétérogènes ● Android nécessite (souvent) une adaptation pour l’utilisation industrielle ● Typologie des projets – Avec ou sans temps réel « dur » – Avec ou sans interfaces graphique (headless) ● Android n’est pas une solution universelle !
  • 4. 4Android pour l’industrie Android, open source project ? ● Le monde de la téléphonie est peu enclin à utiliser du logiciel libre ● Les sources d'Android sont disponibles via AOSP → adaptation possible ou BSP constructeur :) ● En pratique, Android ne suit pas les règles de fonctionnement des projets libres – Développements réalisés « behind de doors » – Nombreux projets « non officiels », comme Android- x86 – Nombreux développements spécifiques (et propriétaires) réalisés par/pour les constructeurs – Si possible, Google évite les composants sous GPL → ré-écriture + licence Apache 2 ● Départ à l’été 2013 du leader du projet (JBQ) !!
  • 5. 5Android pour l’industrie Licences ● Android est constitué de nombreux composants – Noyau Linux (GPL) – Composants Google (Apache 2) – Composants externes (user space) souvent GPL – Propriétaires (pilotes binaires) ● Les applications de Google Play (Android Market) sont pour la plupart propriétaires (idem AppStore) → non disponibles dans les sources d’Android
  • 6. 6Android pour l’industrie La licence GPL en bref ● La GPL a pour origine le projet GNU de la Free Software Foundation (Richard M. Stallman) ● GPL = General Public License ● Intègre la notion de « copyleft » (vs « copyright ») ● La GPL v2 (1991) est la plus répandue (exemple : noyau Linux) ● Principes : 1. La licence s'applique uniquement en cas de redistribution 2. Un code source utilisant du code GPL est du travail dérivé et doit être publié (i.e. celui qui reçoit la version binaire peut obtenir le code source) 3. Pas de lien (ld) possible entre du code GPL et du code « propriétaire » !
  • 7. 7Android pour l’industrie Licence Apache 2 ● Fournie par ASF en 2004 ● Proche des licences BSD et MIT ● Principale différence avec la GPL/LGPL : pas de « copyleft » (dérivation) → pas de publication du code ● Pour plus d'information voir : – http://source.android.com/source/licenses.html – http://www.apache.org/licenses/LICENSE-2.0.html
  • 9. 9Android pour l’industrie Le noyau Linux (rouge) ● Assure l'interface matérielle ● Différent du noyau standard nommé « mainline » et disponible sur http://www.kernel.org – Nouveau système d'IPC (Inter Process Comm.) – Gestion d'énergie améliorée – Système trace (logs) ● Initialement (et toujours) un « fork » du noyau ● Pilotes retirées du noyau officiel en 2009 ● De retour sur drivers/staging/android depuis le 3.3 ● Convergence (partielle) avec le mainline en cours ● Google est contributeur par nécessité, choix pragmatique ● Noyau binaire fourni par défaut dans AOSP
  • 10. 10Android pour l’industrie Bibliothèques + HAL (vert) ● Bibliothèques spécifiquesGoogle ou externes ● Spécifiques : – Bionic, libC « allégée » sous licence BSD, partiellement POSIX → difficulté de portage de code « legacy » – Surface Manager, Audio Manager, ... ● Externes (sources fournies par Google dans AOSP) : – Webkit – OpenSSL – … ● Hardware abstraction layer → accès aux pilotes noyau – Graphique, audio, Wi-Fi, ... – Pas d'accès direct au noyau (différent de GNU/Linux)
  • 11. 11Android pour l’industrie HAL ● Pour chaque « service » on a – Un System service (Java) – Une définition dans la HAL (interface matérielle) + pilote noyau ● Le constructeur doit fournir une bibliothèque (.so) externe à AOSP (sous licence propriétaire) → à ajouter au répertoire /device ● Le pilote noyau – également fourni par le constructeur - reste sous GPL ● Voir un exemple sur http://www.opersys.com/blog/extending-android-hal
  • 12. 12Android pour l’industrie Architecture HAL /frameworks/base/services/java/ /frameworks/base/services/jni/ /hardware/libhardware/ /device/[MANUF.]/[DEVICE] /sdk/emulator/ Noyau ou module /frameworks/base/core/ AOSP-provided ASL Manuf.-provided Manuf. license Manuf.-provided GPL-license Schéma K. Yaghmour Répertoires AOSP
  • 13. 13Android pour l’industrie Android runtime (jaune) ● Dalvik, LA JVM de Google – Grosse valeur ajoutée au niveau performances – Syntaxe Java – Optimisée pour l'embarqué – Non compatible avec JDK Oracle, utilise des fichier .dex – .dex produit à partir du .class par dex → encombrement divisé par 2 ● Les « core libraries » venant du projet Apache Harmony remplacent les « JDK libs » pour le runtime ● Contient également des scripts et binaires nécessaires au démarrage (ramdisk initial) dont Zygote qui démarre Dalvik
  • 14. 14Android pour l’industrie Android framework (bleu) ● Correspond à l'API fournie aux développeurs pour écrire les applications ● Majoritairement écrit en Java ● Utilisation de JNI pour l'accès aux couches basses (C/C++) depuis une application ● La communication utilise Binder, une couche IPC écrite par Google en remplacement des IPC UNIX/POSIX
  • 15. 15Android pour l’industrie Architecture générale (K. Yaghmour) Schéma K. Yaghmour
  • 16. 16Android pour l’industrie AOSP, introduction ● AOSP = Android Open Source Project ● Accessible sur http://source.android.com ● Sources pour les plate formes de référence – Émulateur goldfish – Nexus 4, 7, 10 – Pandaboard (carte ARM) – Certains Galaxy Nexus → http://source.android.com/source/building-devices.html ● Bonne documentation ● AOSP utilise aussi des composants propriétaires (exemple : pilotes graphiques) https://developers.google.com/android/nexus/drivers ● Les sources représentent plusieurs centaines de dépôts Git (1 par projet) et plus de 16 Go !
  • 17. 17Android pour l’industrie AOSP, pré-requis ● Nombreux pré-requis pour la compilation AOSP (rien à voir avec Linux embarqué) ● Machine (puissante) 64 bits sous Linux ou Mac OS X (pas de Windows !) ● 4 Go de RAM, 100 Go de disque ● SMP conseillé ● Distribution Ubuntu 10.04 LTS ou éventuellement 12.04 ● Quelques paquets à installer ● Utilisation de VM déconseillée (mais fonctionne) ● Java 6 → JDK 6.1 ● Largement basé sur GNU Make ● La procédure d'initialisation est décrite sur : http://source.android.com/source/initializing.html
  • 18. 18Android pour l’industrie AOSP « in a nutshell » ● Google fournit l'outil repo (un script Python) afin de gérer les nombreux dépôts Git ● Cet outil utilise un fichier manifest pour indexer les dépôts $ mkdir work && cd work $ repo init -u https://android.googlesource.com/platform/manifest [-b <branch>] $ repo sync [-j N] ● Sélection de la cible, compilation et test $ source build/envsetup.sh $ lunch aosp_arm-eng $ make -j N $ emulator [-show-kernel -shell] & synchronisation avec le dépôt, N jobs chargement des variables cible émulateur (goldfish) + mise au point (eng) sélection de la branche, exemple android-4.3_r2
  • 19. 19Android pour l’industrie Les cibles AOSP ● Différentes cibles dans le menu lunch (4.3) Lunch menu... pick a combo: 1. aosp_arm-eng 2. aosp_x86-eng 3. aosp_mips-eng 4. vbox_x86-eng 5. aosp_deb-userdebug 6. aosp_flo-userdebug 7. ... 12. full_mako-userdebug 13. full_maguro-userdebug 14. full_manta-userdebug 15. full_arndale-userdebug 16. full_toroplus-userdebug 17. full_toro-userdebug 18. full_panda-userdebug ● Différents type de build – user (production) – userdebug (production + accès root + debug) – eng (développement) Nexus 4 Goldfish Pandaboard x86
  • 20. 20Android pour l’industrie Écran de l'émulateur ● Déverrouiller l'écran en « tirant » le cadenas vers l'extérieur
  • 21. 21Android pour l’industrie Remarques sur AOSP ● Les sources occupent environ 16 Go (pour JB) car Google fournit l'intégralité, y compris les composants externes ● Grosse différence avec GNU/Linux (Buildroot, OE, …) qui obtiennent les paquets à partir des dépôts et appliquent des « patch » ● Le système de construction est rudimentaire, rien à voir avec GNU/Linux ! ● Après compilation, le répertoire occupe 40 Go ● Les binaires sont produits sur le répertoire out et indexés sur le nom de la cible $ ls -1 out/target/product generic panda cible émulateur (goldfish)
  • 22. 22Android pour l’industrie Noyau Linux/Android ● Le noyau Linux n'est pas conçu au départ pour la téléphonie – Gestion d'énergie :-( – Mise en veille – IPC System V → « old style » – Gestion de mémoire / processus (context switch) ● Modifications par Google – Wakelocks – Binder – Klogger – Ashmem – Alarm timers – Low memory killer
  • 23. 23Android pour l’industrie Noyau Linux/Android, suite. ● Les pilotes Android sont dans drivers/staging → pas intégrés au mainline ● Retirés en décembre 2009, ré-intégrés dans la version 3.3 ● Effort de convergence sur les versions récentes ● Bonne compatibilité de l’API noyau Linux (modules) ● Rappel : un module noyau ne suffit pas à piloter un périphérique sous Android (HAL)
  • 24. 24Android pour l’industrie SDK ● La plupart des développements Android se font en Java – Langage « simple », très répandu – Très bonne performances de Dalvik ● Google fournit un SDK basé sur Eclipse → ADT (Android Developer Tools) – Simple à utiliser pour les développeurs Java/Win$ (mais pas forcément pour les autres) – Approche « Visual Machin » → New Project, Next, Next, … , Finish ● Test de l'application directement sur émulateur ● Création d'un fichier .apk installable sur n'importe quelle cible Android
  • 26. 26Android pour l’industrie NDK ● Les développements C/C++ sont fait avec le NDK (pour Native Development Kit) – Portage de code existant, proche de POSIX – Possibilité de développer uniquement avec NDK (mais pas conseillé par Google) – Plus souvent, interfaçage avec SDK par JNI (Java Native Interface) ● Android utilise des fichiers Makefile dédiés et assez basiques → Android.mk ● Pas de support officiel Autotools/CMake ● Le NDK contient principalement les chaînes croisées dans toolchains et les bibliothèques (Bionic, …) dans platforms
  • 27. 27Android pour l’industrie NDK et POSIX ● La plupart des RTOS ont une API POSIX (VxWorks, RTEMS, QNX, ...) ● Android n'est pas totalement un système POSIX car la libC (Bionic) est simplifiée par rapport à GNU-libC ● Souvent nécessaire d'importer du code (POSIX) existant (propriétaire ou libre) dans Android – Porter le code en Java ? – Utiliser NDK (plus simple en général) ● Le cas le plus fréquent est l'utilisation d'une bibliothèque C/C++ depuis une application Java (ex : accès pilote noyau JNI) ● Exemples fournis dans le NDK
  • 28. 28Android pour l’industrie Bionic ● La libC Bionic est volontairement beaucoup plus légère que la Glibc The core idea behind Bionic's design is: KEEP IT REALLY SIMPLE. ● Pas de support IPC System V (Android utilise Binder) ! ● Quelques limites dans le support PThread ● Pas de support des exceptions C++ ● Pas de compatibilité binaire avec la Glibc ● Support ARM et x86 uniquement ● Nécessite l'utilisation du compilateur Android (NDK) ● Voir android-ndk-rX/docs/system/libc
  • 29. 29Android pour l’industrie Utilisation d’une chaîne externe ? ● Le NDK a des limitations au niveau POSIX ● Le noyau Android est un noyau Linux donc les appels systèmes standards sont disponibles ● Une solution est d'utiliser une chaîne croisée « standard » (exemples : CodeSourcery, ELDK, …) → installer les bibliothèques sur la cible (en plus de Bionic) ● Problème : intégration dans SDK
  • 30. 30Android pour l’industrie Android et le temps réel ● Android n’est pas conçu au départ pour les applications TR ● L’API POSIX est cependant disponible dans le noyau Linux ● L’application de « patch » TR n’est pas triviale car ces patchs sont prévus pour un noyau « mainline » ● Tests réalisés sur des tâches périodiques avec PREEMPT-RT et Xenomai sous Android-x86 → résultats identiques à ceux de GNU/Linux ● Test directement en mode « console » ● Voir la démonstration :)
  • 31. 31Android pour l’industrie PREEMPT-RT ● Branche expérimentale pour la version 2.6 et 3.x, voir https://rt.wiki.kernel.org ● Initié par Ingo Molnar, contributeur majeur du noyau ● Aucun lien avec « preempt-kernel » ! ● Surtout utilisé sur x86 et des processeurs performants (nécessite TSC = Time Stamp Counter) ● Fonctionne également sur ARM (9 ou plus), Nios II, Microblaze, ... ● Nécessite un noyau « mainline » (ou proche) mais ne sera probablement jamais intégré à la branche officielle ● Mise en place très simple (application d'un patch) ● Mêmes API de programmation que Linux standard
  • 32. 32Android pour l’industrie PREEMPT-RT, suite ● Threaded interrupt model → utilisation d'un thread noyau (donc interruptible) pour le traitement de chaque interruption 4 2 root SW< 0 0% 0% [sirq-high/0] 5 2 root SW< 0 0% 0% [sirq-timer/0] ... 6 2 root SW< 0 0% 0% [sirq-net-tx/0] ● Prévention des inversions de priorité (par héritage) ● Timers noyau haute précision (API hrtimer) ● Réécriture complète des mécanismes de synchronisation (spinlock → mutex) ● Le résultat est un noyau (presque) « préemptif », mais reste un noyau Linux ● Sections critiques avec des tâches non TR
  • 33. 33Android pour l’industrie Linux avec co-noyau ● Utilisation d’un noyau temps dans l’espace mémoire du noyau Linux ● Séparation entre le composant temps-réel et Linux – Ordonnanceur temps-réel spécifique – Pas de dépendance sur les sections critiques Linux ● Virtualisation de la gestion d'interruptions Linux – Routage prioritaire des IRQs vers le co-noyau ● Linux comme tâche idle du co-noyau ● Se rapproche de la technique de « para-virtualisation » des hyperviseurs (adaptation de l'OS) ● Extensions RTLinux, RTAI, Xenomai
  • 34. 34Android pour l’industrie Xenomai, architecture ● Xenomai utilise un micro-noyau (ADEOS) pour partager le matériel avec le noyau Linux micro-noyau noyau TR API TR pilote TR noyau Linux
  • 35. 35Android pour l’industrie Domaines Xenomai Hardware VFS/FS ... Pile réseau Xenomai RTOS Adeos I-Pipe Noyau Code applicatif VxWorks glibc Xenomai libvxworks Code applicatif POSIX Xenomai libpthread Appels système glibc
  • 36. 36Android pour l’industrie Android industriel, avantages/inconvénients ● Avantages – Programmation Java (simple et répandue) – IHM évoluée – Communauté importante – Fait rêver les managers et les comptables (tablette = grand public = bon marché) ● Inconvénients – Incompatibilité POSIX – Système de « build » AOSP rudimentaire par rapport à GNU/Linux – Pas réellement un projet libre ni communautaire – Noyau Linux non standard (même si la situation évolue) – Interfaces matérielles spéciales mal supportées !!
  • 37. 37Android pour l’industrie Conclusions ● Utiliser Android quand : – Le projet nécessite une IHM – Le projet ne nécessite pas de TR dur (pour l’instant) – L’utilisation de Java est un avantage ● Attention à la dépendance / Google → quelle part d’AOSP disponible et jusqu’à quand ? ● Android ne peut remplacer GNU/Linux embarqué – Développement communautaire – Support matériel – Système de construction bien plus avancé (Yocto)