TinyOS
TinyOS est un systĂšme dâexploitation open-source conçu pour des rĂ©seaux de capteurs sans fil.
TinyOS | |
Langues | Multilingue |
---|---|
Ătat du projet | en dĂ©veloppement |
DĂ©pĂŽt | github.com/tinyos/tinyos-main |
Entreprise / DĂ©veloppeur |
TinyOS Alliance |
Licence | Licence BSD |
Ătats des sources | Logiciel libre |
Ăcrit en | NesC |
PremiĂšre version | |
DerniĂšre version stable | 2.1.2 (Đ°ĐČĐłŃŃŃ 2012 Đł.) |
Site web | www.tinyos.net, https://github.com/tinyos/tinyos-main |
Il respecte une architecture basĂ©e sur une association de composants, rĂ©duisant la taille du code nĂ©cessaire Ă sa mise en place. Cela sâinscrit dans le respect des contraintes de mĂ©moires quâobservent les rĂ©seaux de capteurs.
Pour autant, la bibliothĂšque de composant de TinyOS est particuliĂšrement complĂšte puisquâon y retrouve des protocoles rĂ©seaux, des pilotes de capteurs et des outils dâacquisition de donnĂ©es. Lâensemble de ces composants peut ĂȘtre utilisĂ© tel quel, il peut aussi ĂȘtre adaptĂ© Ă une application prĂ©cise.
En sâappuyant sur un fonctionnement Ă©vĂ©nementiel, TinyOS propose Ă lâutilisateur une gestion trĂšs prĂ©cise de la consommation du capteur et permet de mieux sâadapter Ă la nature alĂ©atoire de la communication sans fil entre interfaces physiques.
Propriétés principales
TinyOS est un systĂšme principalement dĂ©veloppĂ© et soutenu par lâuniversitĂ© amĂ©ricaine de Berkeley, qui le propose en tĂ©lĂ©chargement sous la licence BSD et en assure le suivi. Ainsi, lâensemble des sources sont disponibles pour de nombreuses cibles matĂ©rielles. Il a Ă©tĂ© programmĂ© en langage NesC.
Le fonctionnement dâun systĂšme basĂ© sur TinyOS sâappuie sur la gestion des Ă©vĂšnements se produisant. Ainsi, lâactivation de tĂąches, leur interruption ou encore la mise en veille du capteur sâeffectue Ă lâapparition dâĂ©vĂšnements, ceux-ci ayant la plus forte prioritĂ©. Ce fonctionnement Ă©vĂšnementiel (event-driven) sâoppose au fonctionnement dit temporel (time-driven) oĂč les actions du systĂšme sont gĂ©rĂ©es par une horloge donnĂ©e. TinyOS a Ă©tĂ© conçu pour minimiser la consommation en Ă©nergie du capteur. Ainsi, lorsquâaucune tĂąche nâest active, il se met automatiquement en veille.
Cependant, TinyOS ne gĂšre pas le mĂ©canisme de prĂ©emption entre les tĂąches mais donne la prioritĂ© aux interruptions matĂ©rielles. Ainsi, les tĂąches entre elles ne sâinterrompent pas mais une interruption peut stopper lâexĂ©cution dâune tĂąche. Il n'est Ă©galement pas prĂ©vu pour avoir un fonctionnement en temps rĂ©el.
Allocation de la mémoire
TinyOS a une empreinte mĂ©moire trĂšs faible puisquâil ne prend que 300 Ă 400 octets dans le cadre dâune distribution minimale. En plus de cela, il est nĂ©cessaire dâavoir 4 Ko de mĂ©moire libre qui se rĂ©partissent entre 3 composants :
- La pile : sert de mĂ©moire temporaire au fonctionnement du systĂšme notamment pour lâempilement et le dĂ©pilement des variables locales.
- Les variables globales : rĂ©servent un espace mĂ©moire pour le stockage de valeurs pouvant ĂȘtre accessible depuis des applications diffĂ©rentes.
- La mémoire libre : pour le reste du stockage temporaire.
La gestion de la mĂ©moire possĂšde de plus quelques propriĂ©tĂ©s. Ainsi, il nây a pas dâallocation dynamique de mĂ©moire et pas de pointeur de fonctions. Bien sĂ»r cela simplifie grandement lâimplĂ©mentation. Par ailleurs, il nâexiste pas de mĂ©canisme de protection de la mĂ©moire sous TinyOS ce qui rend le systĂšme particuliĂšrement vulnĂ©rable aux crashs et corruptions de la mĂ©moire.
Structure logicielle
Le systĂšme dâexploitation TinyOS sâappuie sur le langage NesC. Celui-ci propose une architecture basĂ©e sur des composants, permettant de rĂ©duire considĂ©rablement la taille mĂ©moire du systĂšme et de ses applications. Chaque composant correspond Ă un Ă©lĂ©ment matĂ©riel (LEDs, timer, ADCâŠ) et peut ĂȘtre rĂ©utilisĂ© dans diffĂ©rentes applications. Ces applications sont des ensembles de composants associĂ©s dans un but prĂ©cis. Les composants peuvent ĂȘtre des concepts abstraits ou bien des interfaces logicielles aux entrĂ©es-sorties matĂ©rielles de la cible Ă©tudiĂ©e (carte ou dispositif Ă©lectronique).
LâimplĂ©mentation de composants sâeffectue en dĂ©clarant des tĂąches, des commandes ou des Ă©vĂšnements.
- Une tùche est un travail de « longue durée ».
- Une commande est l'exĂ©cution dâune fonctionnalitĂ© prĂ©cise dans un autre composant.
- Un événement est l'équivalent logiciel à une interruption matérielle.
Les tĂąches sont utilisĂ©es pour effectuer la plupart des blocs dâinstruction dâune application. Ă lâappel dâune tĂąche, celle-ci va prendre place dans une file dâattente de type FIFO (First In First Out) pour y ĂȘtre exĂ©cutĂ©e. Comme nous lâavons vu, il nây a pas de mĂ©canisme de prĂ©emption entre les tĂąches, et une tĂąche activĂ©e sâexĂ©cute en entier. Ce mode de fonctionnement permet de bannir les opĂ©rations pouvant bloquer le systĂšme (inter-blocage, famine, âŠ). Par ailleurs, lorsque la file dâattente des tĂąches est vide, le systĂšme dâexploitation met en veille le dispositif jusquâau lancement de la prochaine interruption (on retrouve le fonctionnement event-driven).
Les Ă©vĂšnements sont prioritaires par rapport aux tĂąches et peuvent interrompre la tĂąche en cours dâexĂ©cution. Ils permettent de faire le lien entre les interruptions matĂ©rielles (pression dâun bouton, changement dâĂ©tat dâune entrĂ©e, âŠ) et les couches logicielles que constituent les tĂąches.
Dans la pratique, NesC permet de déclarer 2 types de composants : les modules et les configurations. Voici un second tableau récapitulatif :
Composant | Utilisation |
---|---|
Module | Contient le code dâun composant Ă©lĂ©mentaire. |
Configuration | Permet de faire les liens entre différents modules. |
Interface | DĂ©finit les entrĂ©es-sorties et le comportement dâun composant. |
Les modules constituent les briques élémentaires de code et implémentent une ou plusieurs interfaces.
Une application peut faire appel à des fichiers de configuration pour regrouper les fonctionnalités des modules. Un fichier top-level configuration permet de faire le lien entre tous les composants.
Les interfaces sont des fichiers dĂ©crivant les commandes et Ă©vĂšnements proposĂ©s par le composant qui les implĂ©mente. Lâutilisation des mots clefs « Use » et « Provide » au dĂ©but dâun composant permet de savoir respectivement si celui-ci fait appel Ă une fonction de lâinterface ou redĂ©finit son code.
Lâordonnanceur TinyOS
Nous allons dĂ©tailler le fonctionnement prĂ©cis de lâordonnanceur TinyOS qui est au cĆur de la gestion des tĂąches et des Ă©vĂšnements du systĂšme. Le choix dâun ordonnanceur dĂ©terminera le fonctionnement global du systĂšme et le dotera de propriĂ©tĂ©s prĂ©cises telles que la capacitĂ© Ă fonctionner en temps rĂ©el.
Lâordonnanceur TinyOS câest :
- 2 niveaux de priorité (bas pour les tùches, haut pour les évÚnements)
- 1 file dâattente FIFO (disposant dâune capacitĂ© de 7)
Par ailleurs, entre les tĂąches, un niveau de prioritĂ© est dĂ©fini permettant de classer les tĂąches, tout en respectant la prioritĂ© des interruptions (ou Ă©vĂšnements). Lors de lâarrivĂ©e dâune nouvelle tĂąche, celle-ci sera placĂ©e dans la file dâattente en fonction de sa prioritĂ© (plus elle est grande, plus le placement est proche de la sortie). Dans le cas oĂč la file dâattente est pleine, la tĂąche dont la prioritĂ© est la plus faible est enlevĂ©e de la FIFO.
Package TinyOS
TinyOS est prĂ©vu pour fonctionner sur une multitude de plateformes, disponibles dĂšs lâinstallation. En effet, TinyOS peut ĂȘtre installĂ© Ă partir dâun environnement Windows (2000 et XP) ou bien GNU/Linux (Red Hat essentiellement, mais dâautres distributions sont Ă©galement possibles).
Deux principales versions de TinyOS sont disponibles : la version stable (v. 1.1.0) et la version actuellement en cours de tests (v. 1.1.15); la premiĂšre prĂ©sente moins de risques mais est nettement moins rĂ©cente. En outre, afin dâinstaller la derniĂšre version de test, il est nĂ©cessaire de procĂ©der dâabord Ă lâinstallation de la version 1.1.0.
ProcĂ©dure dâinstallation :
- Windows : un guide propose lâinstallation de tous les principaux outils nĂ©cessaires au bon fonctionnement du systĂšme, notamment Cygwin (couche d'Ă©mulation de l'API Linux) qui permet dâavoir une interface Unix sous Windows. Le JDK Java 1.4 de Sun est nĂ©cessaire afin dâeffectuer la procĂ©dure dâinstallation.
- GNU/Linux : des packages RPM sont proposés au téléchargement, un guide explique la marche à suivre. Les distributions Linux ayant un autre gestionnaire de paquet peuvent utiliser un programme (comme « Alien ») pour installer les packages, ou compiler directement à partir des sources. Le JDK de IBM est nécessaire.
Par la suite, des packages supplĂ©mentaires peuvent ĂȘtre ajoutĂ©s en passant par le site SourceForge, qui met Ă disposition le code open source de TinyOS et d'un ensemble de programmes spĂ©cialisĂ©s.
Cibles possibles pour TinyOS
Il existe de nombreuses cibles possibles pour ce systĂšme dâexploitation embarquĂ©. MalgrĂ© leurs diffĂ©rences, elles respectent toutes globalement la mĂȘme architecture basĂ©e sur un noyau central autour duquel sâarticule les diffĂ©rentes interfaces dâentrĂ©e-sortie, de communication et dâalimentation. Voici un schĂ©ma reprĂ©sentant cette architecture :
Mote, processeur, RAM et Flash : On appelle gĂ©nĂ©ralement Mote la carte physique utilisant TinyOS pour fonctionner. Celle-ci a pour cĆur le bloc constituĂ© du processeur et des mĂ©moires RAM et Flash. Cet ensemble est Ă la base du calcul binaire et du stockage, Ă la fois temporaire pour les donnĂ©es et dĂ©finitif pour le systĂšme TinyOS.
Radio et antenne : TinyOS est prĂ©vu pour mettre en place des rĂ©seaux sans fils, les Ă©quipements Ă©tudiĂ©s sont donc gĂ©nĂ©ralement Ă©quipĂ©s dâune radio ainsi que dâune antenne afin de se connecter Ă la couche physique que constitue les Ă©missions hertziennes.
LED, interface, capteur : TinyOS est prévu pour mettre en place des réseaux de capteurs, on retrouve donc des équipements bardés de différents types de détecteurs et autres entrées.
Batterie : Comme tout dispositif embarquĂ©, ceux utilisant TinyOS sont pourvus dâune alimentation autonome telle quâune batterie.
Voici une liste rapide des équipements supportés initialement par TinyOS dans sa version « tinyos-1.1.11-3is ».
ATMega8 | AVRMote | Mica | Mica2 |
Micadot | Mica128 | Micaz | MSP430 |
Rene2 | Telos | Telos2 | PC |
Au-delĂ de cette liste, il est possible dâimplĂ©menter tout type de plateforme embarquĂ©e physique en redĂ©veloppant les bibliothĂšques nĂ©cessaires Ă la prise en compte des entrĂ©es sorties nĂ©cessaires. Ainsi, le lien suivant propose le rĂ©sultat dâune thĂšse mettant en Ćuvre TinyOS sur un dispositif Freescale MC13192-EVB sur un rĂ©seau ZigBee :
Sources et liens
- Le site officiel de TinyOS
- Une distribution TinyOS en libre téléchargement
- Un trĂšs bon cours en Anglais sur le sujet
- Une thĂšse mettant en Ćuvre TinyOS sur un rĂ©seau de capteurs fonctionnant avec ZigBee
- Un premier exemple pour la prise en main de TinyOS et du langage NesC
- Les tutoriels officiels du site pour mieux comprendre TinyOS