De plus en plus d'objets quotidiens embarquent avec eux de l'intelligence. Un ordinateur embarqué se définit généralement par le fait qu'il n'est pas visible en tant que tel, mais est intégré dans un équipement doté d'une autre fonction ; on dit aussi que le système est enfoui, ce qui traduit plus fidèlement le terme anglais embedded.
Un inventaire à la Prévert serait nécessaire pour citer les systèmes informatiques embarqués que nous utilisons quotidiennement: gestion de l'ascenseur, auto radio, calculateur d'``air bag'', distributeur de boissons, routeur Internet ou téléphonique, téléphone mobile, distributeur de billets, une console de jeux, une carte graphique (bientôt un raton laveur car le chien électronique existe déjà !!))... Nous voyons bien que les contraintes imposées à tous ces systèmes ne sont pas les mêmes: qu'y a t'il de commun entre un satellite et une imprimante, à part le fait de contenir des processeurs ?
On peut classer les acteurs de l'informatique embarquée suivant de multiples critères:
Secteur d'activité | Contraintes |
Équipements scientifiques | Performances, fiabilité, coût |
Équipements militaires et aérospatiaux | Performances, fiabilité, pérennité, intégration |
Transports | Fiabilité, coût, interactivité |
Informatique industrielle | Fiabilité, coût, pérennité |
Matériel de bureau | Performance, coût, standardisation |
Réseau et télécommunications | Performance, fiabilité, intégration |
Électronique grand public | Performance, coût, design / intégration |
Ceci implique une diversité certaine des architectures matérielles...
On peut s'amuser à découper une station de travail classique suivant cinq blocs fonctionnels. Puis, en éliminant tour à tour un ou plusieurs blocs, on obtient différentes configurations matérielles pouvant s'appliquer à un équipement embarqué.
En utilisant le schéma 4.1 on peut construire:
D'autre part, l'augmentation de la proportion de matériel standard (et notamment de type PC) dans les équipements embarqués est tout à fait remarquable. En effet,
De part son gain de notoriété, GNU/Linux s'installe sur de nombreuses plates formes différentes de son ``nid'' d'origine PC/x86. On peut aussi trouver Linux codé pour les processeurs PPC, 68k, Alpha, MIPS, certains microcontrôleurs, ARM , SPARC, travaillant sur des architectures VME, CompactPCI, PC/104.
Nous avons vu que les caractéristiques et besoins d'un système embarqué variaient beaucoup selon leur utilisation. Néanmoins, on peut décrire les composants essentiels dont un système embarqué a besoin:
Gratuité à l'achat et pendant l'exploitation (runtime license), c'est l'avantage le plus populaire des logiciels libres et tout le travail de la Communauté est de rappeler que "libre" différent de "gratuit" !!!
Code modifiable à volonté du moment que les modifications sont mises dans le domaine public. Ceci permet d'adapter son système à ses besoins, d'avoir des exemples pour un développement similaire. Mais aussi, cette caractéristique est importante pour améliorer sécurité et fiabilité (les failles et erreurs sont rapidement repérées et corrigées par la Communauté).
Coûts de formation et maintenance faibles car GNU/Linux est basé sur POSIX (les administrateurs UNIX ont peu de mal à l'aborder).
Système d'exploitation fiable (mémoire protégée).
Un large éventail de protocoles, langages, pilotes, systèmes de fichiers, interfaces graphiques... sont supportés par cet OS. La liste des langages est par exemple absolument impressionnante (il manque seulement Visual Basic (!!) :-)
Linux n'est pas un micro-noyau, il en résulte que la taille minimale
qu'il peut atteindre n'est pas aussi impressionnante que celle du noyau de QNX:
Neutrino (quelques dizaines de Koctets). Mais, d'une part, les contraintes d'empreinte
mémoire sont moins drastiques qu'il y a quelques années car on utilise maintenant
des composants standards et grand public. La RAM est souvent bien supérieure
a 4 Moctets et des Flash de 32 Moctets atteignent des prix raisonnables (développement
des appareils photos numériques, balladeurs MP3...). De plus, Un micro-noyau
a besoin de nombreux modules périphériques pour fonctionner, la taille totale
augmente alors très vite...
Pour les adeptes du concept, il faut s'intéresser de près à Hurd, le
micro-noyau libre ou ELKS pour les machines à base de 286 www.elks.ecs.soton.ac.uk/cgi-bin/ELKS/.
Les processeurs et / ou architectures différents de x86/PC demandent plus de travail de configuration. Les utilisateurs étant moins nombreux, on ne dispose pas d'une aide aussi rapide et les documents sont plus difficiles à trouver.
Aucune société n'est à l'origine du développement de GNU/Linux. Je vois plutôt ça comme un avantage et un gage de pérennité mais certains décideurs semblent le craindre. De plus, ceci est une opportunité pour des sociétés de service qui peuvent s'engager comme responsables de développements logiciels libres auprès de leurs clients.
Un logiciel embarqué n'a pas forcément de contraintes temps réel. On peut s'attendre
à ce qu'une machine doive suivre un tel comportement si elle est reliée au monde
réel, via des entrées / sorties. Les événements extérieurs doivent être traités
en un temps déterminé pour produire une réaction appropriée.
Un système fonctionne en temps réel lorsqu'il est capable d'absorber toutes les informations d'entrée sans qu'elles soient trop vieilles pour l'intérêt qu'elles présentent, et par ailleurs, de réagir à celles-ci suffisamment vite pour que cette réaction ait un sens.
ou
Un logiciel ou un sous-ensemble de logiciel est dit temps réel ou déterministe si son exécution a lieu en un temps déterminé et connu.
Un système d'exploitation est dit temps réel ou déterministe s'il permet d'exécuter des tâches logicielles en temps réel. Cette notion est indépendante de la vitesse de calcul.
Pour assurer le déterminisme des tâches, un système d'exploitation doit être
soit monotâche, soit multitâche et totalement préemptif. La préemptivité
induit un autre concept, la notion de priorité. En effet, un noyau multitâche
préemptif recevant une interruption, doit répartir de nouveau le temps CPU entre les
tâches. Cette répartition est effectuée par le moniteur système (scheduler)
selon un critère:
Mais, le noyau Linux est non préemptif... Une tâche peut être interrompue et mise en attente par le moniteur, selon sa priorité. En revanche, un appel système ne peut être interrompu, il peut durer jusqu'à quelques centaines de milli-secondes (ex: fork() ). L'implémentation d'un comportement temps réel ``dur'' avec le noyau Linux n'est possible qu'au prix de sévères modifications du code du noyau. Cependant, des projets ont vu le jour pour améliorer les performances temps réel ``mou'' de Linux notamment dans le domaine du son. On peut trouver de tels projets en partant de www.crosswinds.net/ linuxmusic/lowlatency.html ou depuis la société MontaVista www.mvista.com.
L'approche ``bas niveau'' sera discutée dans la section 5.2 consacrée à l'architecture de RTLinux...
Les entreprises proposant une solution Linux embarqué:
Les entreprises proposant une solution Linux temps réel:
Il est fort intéressant, lorsque l'on développe une solution à base de logiciels libres, de disposer d'une liaison Internet pour avoir accès aux forums de discussions et aux listes de diffusions. En effet, on trouve rapidement une réponse en posant une question sur un des forums/listes dédiés aux Linux temps-réels car ce milieu est passionné et enthousiaste. Attention tout de même de ne pas poser une question à réponse triviale : lire la documentation avant toute requête.
Internet est une base de documentation inépuisable et effervescente ! Il est impossible de faire le tour de tous les papiers mis à la disposition du développeur. Il faut donc avoir quelques flotteurs pour ne pas se noyer et ``surfer'' confortablement d'un renseignement à l'autre...
Les outils les plus efficaces, à la disposition du développeur sont principalement:
Exemple: Pour le temps réel...
Realtimelinux.org a une ``mailing lists'' permettant de se tenir au courant des nouveautés dans le monde des Linux temps réel. Chacun peut émettre un point de vue, poser une question ou demander de l'aide... Pour souscrire à cette liste, il suffit de se rendre sur le site realtimelinux.org et de suivre la procédure décrite (Archives des mailing lists www.realtimelinux.org/archives/). La plus intéressante des ces listes et la plus active est celle intitulée ``realtime''.
Un autre groupe, plus proche du produit RTLinux et extrêmement actif est la liste de diffusion maintenue par rtlinux.org. Elle apporte de bons renseignements au jour le jour, il me semble indispensable d'y souscrire : www.rtlinux.org