Professional Documents
Culture Documents
Altran Ouest
Centre d'affaires Alphasis
Sbastien BERRUER Espace Performance
Tel : 06 76 35 29 55 Btiments J&K
35760 St Grgoire
Option ISAV Tel : 02 23 25 36 00
Promotion 2009 Fax : 02 23 25 36 01
Rapport de projet de fin d'tude
Remerciements
Je tiens remercier Mme Alexandra Poirier, responsable des Ressources Humaines, et
Mr Christophe Ducolone, Directeur Oprationnel, pour m'avoir donn la chance de faire
ce stage au sein d'Altran Ouest.
Je voudrais remercier Mr Jean-Michel Hautbois, mon matre de stage. Il m'a prodigu
de nombreux conseils et avis techniques au cours du projet. Il m'a offert la possibilit
d'avoir une vision sur la fonction de chef de projet et sur la gestion de projet en
gnral. Il a su me mettre en confiance et me motiver tout au long de la priode.
Je souhaite remercier Mrs Stphane Davy et Jean-Philippe Foures. Ces personnes ont
travaill dans le mme contexte que moi et m'ont apport leurs avis sur certains
problmes techniques. Ils ont aussi apport une ambiance de travail studieuse mais
dcontracte.
Finalement, je remercie toutes les personnes que j'ai pu rencontrer au sein d'Altran
Ouest pour leurs gentillesse et leur accueil.
2/104
Rsum
J'ai effectu mon stage de troisime anne au sein du centre de service eLiSe. Ce
centre de service est spcialis dans le domaine des systmes Linux embarqus. C'est
une spcificit du groupe d'Altran Ouest. Le groupe Altran Ouest est un groupe
implant mondialement qui fait du conseil en innovation.
Au cours de ce stage, j'ai tudi le systme temps-rel Xenomai. Cela m'a permis de
comprendre les caractristiques des systmes temps-rels et de dcouvrir les
domaines d'applications courants pour ces systmes. J'ai aussi abord les diffrences
qu'apporte le patch-RT sur le noyau Linux. En regard de cette solution, j'ai
profondment tudi le systme Xenomai : son utilisation d'Adeos, la faon dont il
gre le temps-rel et l'utilisation de ce systme travers son API.
J'ai effectu plusieurs tches au cours de ces 5 mois. J'ai commenc par mettre en
place mon environnement de travail. J'ai du me familiariser avec la carte Viper et les
mthodes de communications avec cette carte. Suite un problme de disponibilit
de ressources, j'ai cr le systme de fichier utilis au cours de l'tude. Enfin, j'ai pu
raliser le portage de Xenomai sur la carte PC/104 et tudier les performances du
systme.
3/104
Rapport de projet de fin d'tude
Summary
I spend 5 months in Altran Ouest for my training course. Particularly, I worked in the
eLiSe service which is specialised in the development of embedded Linux systems.
I firstly spend my time to read the documentation about the subject. I learned the
features and the specifics constrains of real-time systems. I learned too what are the
domains who make use of those systems. I had a wide view about the RT patch for
Linux and the differences that it introduces in the behaviour and the structure of the
Linux kernel. Of course, I had a deep view in the Xenomai system : its use of Adeos,
its structure and the API it shows.
During five months, I made activities that cover a large range of embedded systems. I
began by installing the development environment in the host PC. Then, I learned how
to use the computer board on which I realised the port. It supposed some specifics
methods to communicate with the systems. I had to create a complete filesystem to
integrate Xenomai on the board. I realized the port of Xenomai for the ARM platform
and performed some tests.
4/104
Table des matires
Remerciements.............................................................................................2
Rsum........................................................................................................3
Summary.....................................................................................................4
Liste des abrviations.....................................................................................9
Introduction................................................................................................10
Prsentation de l'entreprise..............................................................................11
1.Groupe Altran...........................................................................................12
1.1.L'implantation.....................................................................................12
1.2.Les domaines d'activits......................................................................12
1.3.Les chiffres cls..................................................................................13
2.Altran Ouest.............................................................................................14
2.1.L'implantation.....................................................................................14
2.2.L'organigramme..................................................................................14
2.3.Les secteurs d'activits d'Altran Ouest...................................................15
2.4.Les comptences de la branche TEM......................................................16
3.eLiSe : embedded Linux Services................................................................17
3.1.Les comptences................................................................................17
3.1.1.Dveloppement et personnalisation noyau.......................................18
3.1.2.Environnement de bas niveau.........................................................18
3.1.3.Intgration d'applications..............................................................18
3.1.4.Environnements de dveloppement.................................................18
3.2.Les plateformes d'tudes.....................................................................18
3.2.1.Veille technologique......................................................................18
3.2.2.La carte industrielle Arcom VIPER...................................................19
3.2.3.Le tlphone Android ...............................................................19
3.2.4.Le tlphone OpenMoko ...........................................................19
3.3.Les services.......................................................................................20
3.3.1.Audit et expertise.........................................................................20
3.3.2.tudes et avis de faisabilit............................................................20
3.3.3.Dveloppement et support.............................................................20
Les systmes temps-rels.................................................................................21
1.Introduction aux systmes temps-rels........................................................22
2.Contraintes du temps rel..........................................................................22
2.1.Les chances....................................................................................22
2.2.Les latences.......................................................................................22
2.3.La premption....................................................................................24
3.Utilisations typiques..................................................................................24
3.1.Temps rel dur...................................................................................25
3.2.Temps rel mou..................................................................................25
4.Patch-RT..................................................................................................25
4.1.Modifications structurelles....................................................................26
4.1.1.Les chemins d'excutions..............................................................26
4.1.2.La premption du noyau................................................................26
4.1.3.La gestion des interruptions...........................................................27
4.2.Modifications comportementales...........................................................28
4.2.1.Les modes de configuration............................................................28
4.2.2.L'hritage de priorit.....................................................................29
5/104
Rapport de projet de fin d'tude
6/104
4.1.Manipulations sur le noyau Linux...........................................................59
4.1.1.Patch du noyau............................................................................59
4.1.2.Configuration du noyau.................................................................60
4.1.3.Compilation du noyau...................................................................60
4.2.Installation sur le systme de fichier......................................................61
4.2.1.Mise en place du noyau.................................................................61
4.2.2.Compilation des librairies...............................................................62
5.valuation de Xenomai...............................................................................63
5.1.Visualisation de la console....................................................................63
5.2.Critres d'valuations..........................................................................64
5.2.1.Les situations propices aux latences................................................64
5.2.2.La mesure de la gigue...................................................................65
5.3.La suite de tests.................................................................................65
5.3.1.Clocktest.....................................................................................66
5.3.2.Cyclic..........................................................................................67
5.3.3.Klatency......................................................................................67
5.3.4.Latency.......................................................................................68
5.4.Rsultats...........................................................................................68
5.4.1.Commentaires critique..................................................................68
5.4.2.Analyse des mesures de clocktest ..............................................69
5.4.3.Analyse des mesures de latency ................................................69
5.5.Le traceur du pipeline..........................................................................70
6.Dveloppement sous Xenomai....................................................................70
6.1.Ralisations.......................................................................................70
6.1.1.Les comptences acquises.............................................................70
6.1.2.Les outils.....................................................................................71
6.2.Dvelopper des bonnes pratiques ....................................................71
6.2.1.Le management des tches............................................................71
6.2.2.L'accs aux donnes.....................................................................72
6.3.Le dboguage des applications..............................................................73
6.3.1.Dboguage symbolique.................................................................73
6.3.2.Le traage des appels systmes......................................................74
Conclusion..................................................................................................76
Ouverture...................................................................................................76
Annexes.........................................................................................................77
A.Caractristiques de la carte Viper................................................................78
A.1.Processeur.........................................................................................78
A.2.Mmoire............................................................................................79
A.3.Connecteurs srie...............................................................................79
A.4.Fonctionnalits rseau.........................................................................79
B.Rsultats du programme latency ............................................................80
B.1.Mesures releves (n1).......................................................................80
B.2.Mesures releves (n2).......................................................................81
B.3.Mesures releves (n3).......................................................................82
B.4.Mesures releves (n4).......................................................................83
C.Logiciel de suivi de version : git..................................................................84
C.1.Concepts...........................................................................................84
C.2.Utilisation..........................................................................................85
C.3.Autres commandes.............................................................................87
D.Logiciel de suivi de version : svn.................................................................89
7/104
Rapport de projet de fin d'tude
D.1.Concepts...........................................................................................89
D.2.Utilisation..........................................................................................90
D.3.Autres commandes.............................................................................92
E.Mise en place d'un serveur TFTP..................................................................94
E.1.Installation........................................................................................94
E.2.Configuration.....................................................................................94
E.3.Vrification de la configuration..............................................................95
F.Mise en place d'un serveur NFS...................................................................96
F.1.Installation.........................................................................................96
F.2.Configuration......................................................................................96
G.Dboguage symbolique : gdb.....................................................................97
G.1.Procdure de dboguage distance......................................................97
G.2.Les commandes usuelles.....................................................................98
Bibliographie.............................................................................................101
Sites Internet.........................................................................................101
Livres...................................................................................................101
Articles.................................................................................................102
8/104
Liste des abrviations
API Application Programming Interface
ARM Advanced RISC Machine
Bash Bourne again shell
EABI Embedded-Application Binary Interface
GNU GNU is Not Unix
HTTP HyperText Transfer Protocol
IP Internet Protocol
NFS Network FileSystem
PC Personal Computer
RAM Random Access Memory
RISC Reduced Instruction Set Computer
SRAM Static Random Access Memory
SSH Secured SHell
Telnet Teletype network
TFTP Trivial File Transfer Protocol
URL Uniform Resource Locator
9/104
Rapport de projet de fin d'tude
Introduction
J'ai effectu mon stage de troisime anne dans le centre eLiSe du groupe Altran,
Rennes. Ce centre est spcialis dans les systmes Linux Embarqus.
Dans le cadre du dveloppement de l'activit de cette branche, j'avais pour mission de
porter l'environnement temps-rel Xenomai sur une carte industrielle et d'en valuer
les performances. Cette carte industrielle avait la particularit d'tre conforme au
format PC/104 et d'embarquer un processeur de type ARM.
Dans le prsent de ce rapport de stage, je commence par prsente le groupe Altran.
J'y dtaille l'activit du groupe et je donne quelques chiffres cls. Je prsente ensuite
l'organisation du groupe au niveau de Rennes ainsi que les activits d'Altran Ouest
dans la rgion. Enfin, je prsente le centre de service eLiSe.
Je joint dans le rapport un compte-rendu de mes recherches sur les systmes
temps-rels de type Linux. Je dcris les spcificits des systmes temps-rels, les
distinctions qui peuvent exister dans ce domaine ainsi que les principaux utilisateurs
de tels systmes. Au cours des recherches sur Xenomai, j'ai souvent rencontr des
rfrences au patch-RT pour le noyau Linux ; je prsente donc un rapide aperu des
modifications qu'il apporte au noyau Linux. Enfin, aprs un rapide historique du projet
Xenomai, j'explique le systme Adeos et la faon dont Xenomai l'utilise pour grer le
temps-rel. Je termine la prsentation de Xenomai en faisant une description des
mcanismes introduit au niveau utilisateur (utilisation des API).
Le corps du rapport est constitu par la prsentation des activits que j'ai men au
cours de ces 5 mois. Je prsente donc : la mise en place de l'environnement de
dveloppement, la prise en main de la carte Viper et le processus de cration du
systme de fichier. Une fois ces tapes ralises, j'ai pu procder au portage de
l'environnement Xenomai sur la carte. Mon stage consistait aussi faire une
valuation des performances du systme. Dans cette optique, j'ai dvelopp quelques
applications utilisant l'API temps-relle de Xenomai.
10/104
Prsentation de l'entreprise
Altran Ouest
Rapport de projet de fin d'tude
1. Groupe Altran
1.1. L'implantation
Le groupe Altran a t fond en 1982. Il est implant dans 26 pays dans le monde.
12/104
Les domaines d'activits - Les domaines d'activits
13/104
Rapport de projet de fin d'tude
prs de la moiti du chiffre d'affaire est ralis par les activits de la branche
conseil en technologies et R&D
un tiers du chiffre d'affaire provient des activits de la branche conseil en
organisation et systmes d'information
environ 15% du chiffre d'affaire est produit par la branche conseil en stratgie
et management
Les consultants du groupes taient 18522 en dcembre 2008. Il y a eu 1020
recrutements nets au cours de l'anne 2008.
2. Altran Ouest
2.1. L'implantation
Au niveau Franais, une rorganisation a t mene pour fusionner une multitude de
socits. Il a donc t dlimit six zones, en plus de Paris : la rgion Ouest, la rgion
Est, la rgion Nord, la rgion Sud-ouest, la rgion Rhne-Alpes et la rgion
Mditerrane.
L'implantation du groupe Altran dans l'Ouest date de 1984. Les trois plus gros ples
de l'Ouest sont, dans l'ordre : Rennes, Brest et Nantes. Dans l'Ouest, le groupe se
veut centr autour des clients, tout en s'appuyant sur sa force l'international.
Cette implantation historique permet de compter aujourd'hui 425 ingnieurs rpartis
sur les rgions Bretagne, Pays de Loire et Poitou-Charentes. Pour mieux cerner la
rpartition, on compte 230 consultants Rennes, 85 Brest et 110 Nantes.
2.2. L'organigramme
Le groupe Altran est gouvern grce un comit excutif et un conseil
d'administration. Le premier (le comit excutif) regroupe les personnes responsables
de la direction du groupe : le Prsident-Directeur Gnral, le directeur financier et
trois directeurs gnraux adjoints. Le second (le conseil d'administration) dcide de la
politique du groupe.
Ensuite, au niveau rgional, les comptences sont rparties de la faon suivante :
14/104
L'organigramme - L'organigramme
Les consultants sont les personnes qui effectuent la ralisation des projets. Ils
ont le profil ingnieur. On retrouve deux types de comptences : les experts et
les chefs de projet. Les experts sont spcialiss dans un domaine particulier.
Les chefs de projet se situent la frontire du management et de la technique.
Au cours d'un projet, ils coordonnent le travail de plusieurs autres consultants.
Ils peuvent demander l'accompagnement de consultants experts dans un
domaine. Les consultants de la direction des offres ont des rles souvent plus
transversaux : ils interviennent pour rpondre aux appels d'offres publics, ils
organisent les fonctions lis la Qualit...
Les managers ont trois rles principaux : le recrutement, le management d'une
quipe et la relation commerciale. Ainsi, ils dmarchent les clients pour trouver
des projets raliser. En fonction des demandes des clients, ils recherchent les
comptences parmi les personnes disponibles au sein d'Altran. Ils se mettent
gnralement en rapport avec les consultants pour bnficier de l'avis
technique de ces derniers lors de la phase de dcision des projets. Ils
participent aux ngociations et aux chiffrages financiers des projets.
Les quipes administratives et la direction des Ressources Humaines apportent
leur support tout les niveaux de l'organisation.
Le directeur oprationnel oriente la politique du groupe au niveau rgional. Il
sollicite les managers en leurs donnant une direction commerciale. C'est
gnralement lui que revient la dcision de lancer la ralisation d'un projet.
15/104
Rapport de projet de fin d'tude
16/104
Les comptences de la branche TEM - Les comptences de la branche TEM
17/104
Rapport de projet de fin d'tude
18/104
La carte industrielle Arcom VIPER - La carte industrielle Arcom VIPER
19/104
Rapport de projet de fin d'tude
20/104
Les systmes temps-rels
Les solutions temps-rels de type Linux
Rapport de projet de fin d'tude
22/104
Les latences - Les latences
attendant que la donne soit disponible. Lorsque le signal d'interruption indique que la
donne est disponible, il existe un certain temps entre cette notification et la poursuite
du traitement du premier programme. Ce dlai est appel une latence d'excution
suite une interruption.
23/104
Rapport de projet de fin d'tude
Au total, il faut comprendre que l'on doit attendre la somme de toutes ces dures
avant qu'un programme ne ragisse un vnement donn.
2.3. La premption
La premption est la capacit d'interrompre l'excution d'une tche en faveur de
l'excution d'une autre tche.
Pour donner l'impression que plusieurs processus ont accs en mme temps l'unit
de calcul, les systmes multi-tches mettent un place le mcanisme
d'ordonnancement des tches. Ce concept (partage du temps d'utilisation du
processeur) repose sur la capacit du systme prempter l'excution du processus
en cours. Dans les systmes multi-tches, la premption du processus en cours se fait
au profit de l'ordonnanceur. L'ordonnanceur mne un arbitrage pour dcider quel
processus doit s'excuter.
Dans un systme temps-rel, il parat logique que les tches qui sont les plus critiques
gagnent le droit d'utiliser le processeur lorsqu'elles ont besoin de s'excuter. Ainsi,
toute section de code excutable doit pouvoir tre interrompue au profit d'une autre.
Ce principe est valable la fois pour les processus utilisateurs et pour le code du
noyau.
De plus, lorsque la premption est faite pour organiser la politique d'ordonnancement,
cette politique doit satisfaire en priorit les demandes en ressources des processus les
plus critiques. Ce point est rgis par la mise en place, dans les systmes temps-rels,
d'ordonnancements spcifiques : ordonnancement rapide (type Round-Robin ),
ordonnancement hritage de priorits...
3. Utilisations typiques
Les systmes temps-rels ne reposent pas que sur l'aboutissement des traitements,
ils font apparatre des contraintes sur les chances. Selon la gravit de la non tenue
des chances, on dfinit la duret du temps rel.
24/104
Utilisations typiques - Utilisations typiques
4. Patch-RT
Depuis plusieurs annes, plusieurs personnes ont eu la volont de modifier le noyau
Linux pour qu'il soit capable de rpondre aux contraintes du temps-rel, sans l'aide de
co-noyau. Le patch-RT a la vocation de transformer le noyau Linux (par l'application
d'un patch sur le code source du noyau) en un vritable systme temps rel. Le
mainteneur actuel de ce patch est Ingo Molnar, un ingnieur de la socit Red Hat.
Les programmes qui utilisent ce noyau modifi n'utilisent pas
d'API particulire, ils se basent sur l'utilisation de l'API POSIX.
25/104
Rapport de projet de fin d'tude
En effet, dans la lign du standard POSIX2 (norme IEEE Std 1003.1), il a t dfini un
certain nombre d'appels systmes pour rsoudre les contraintes de temps-rel
(management de l'ordonnancement, signaux temps-rels, mthodes de cration de
threads ...). Prsents sous la forme d'amendements pour la version IEEE Std
1003.1-1990, ils ont t incorpors comme des options la norme, lors de sa rvision
en 2001.
2 La norme POSIX (Portable Operating System Interface) est issu de la ncessit pour les
diffrents systmes de type Unix (d'o le X du nom de la norme) d'avoir une interface
identique, simplifiant ainsi la portabilit des applications.
26/104
La premption du noyau - La premption du noyau
27/104
Rapport de projet de fin d'tude
28/104
Les modes de configuration - Les modes de configuration
29/104
Rapport de projet de fin d'tude
30/104
Compteurs haute rsolution - Compteurs haute rsolution
soit capable de distinguer l'arrive de cet vnement dans le temps. La plus petite
unit que le noyau est capable de rsoudre est le jiffy . La frquence (en Hertz)
des jiffies est essentiellement calcule partir d'une variable nomme HZ.
La diminution de cette unit de temps minimale permet d'augmenter la rsolution
temporelle du systme. Mais, la mise jour du compteur de jiffies ncessite
l'excution d'une routine d'interruption li l'horloge. Donc, il y a le risque de
surcharger le systme (avec le traitement de cette interruption) lorsque l'on
augmente la rsolution du systme.
L'implmentation originale des compteurs fait apparatre des latences importantes.
L'implmentation des compteurs haute rsolution temporelle a t ajoute pour
l'architecture x86 depuis la version 2.6.20. L'architecture de base avait t rajoute
dans le noyau Linux depuis la version 2.6.18. On peut rendre fonctionnel ce systme
depuis le menu de configuration de la compilation du noyau. Le travail de
dveloppement continu d'tre fait dans le patch-RT.
5. Xenomai
Pour implmenter le temps rel avec des systmes de type GNU/Linux, on peut faire
fonctionner deux noyaux cte--cte (on parle de systmes co-noyaux). L'approche
consiste ajouter un noyau (ou micro-noyau ) ct d'un noyau Linux classique.
C'est l'approche qui est faite par Xenomai. Le micro-noyau s'occupe de la gestion des
interruptions matrielles, fait fonctionner des tches temps-relles, apporte des
fonctionnalits de gestion du temps...
5.1. Historique
On situe gnralement le lancement du projet Xenomai
suite la publication de l'article de Karim Yaghmour sur
Adeos en 20015. Xenomai a t cr pour faciliter la
migration des applications qui reposaient sur des
solutions temps-rels propritaires vers une solution Open Source (systme de type
GNU/Linux). Un des points critiques de la migration est de continuer garantir la
bonne tenue des chances (contrainte typique des systmes temps-rels).
C'est en 2002 que Xenomai a t port sur Adeos. Ceci a permis d'affranchir Xenomai
des dpendances lis aux diffrents systmes d'exploitations existants et d'amliorer
la prdiction des latences d'interruptions.
En 2003, le projet originel a t fusionn avec le projet RTAI dont le but tait lui aussi
de proposer un solution temps-rel libre. Le code source de RTAI et la partie
spcifique Xenomai (qui s'appelait alors RTAI/fusion) sont rests relativement
indpendants. C'est aprs ce regroupement, et au cours des dveloppements qui ont
suivi, que le projet Xenomai a gagn sa capacit d'tre port sur diffrentes
architectures matrielles.
En 2005, le projet Xenomai s'est spar du projet RTAI et a repris son indpendance.
cette date, le projet Xenomai a pris son nom actuel.
31/104
Rapport de projet de fin d'tude
5.2. Adeos
Adeos ( Adaptive Domain Environment for Operating Systems ) est une couche de
virtualisation disponible sous la forme d'un patch du noyau Linux. Adeos a pour but
d'autoriser et de partager l'accs une mme ressource physique pour plusieurs
systmes.
32/104
Les domaines - Les domaines
33/104
Rapport de projet de fin d'tude
ncessaires.
Il a t voqu la possibilit que le systme soit dans l'incapacit de recevoir une
interruption. Pour viter que les notifications d'interruptions soient perdues pour le
domaine, elles sont enregistres dans une zone qui servent de tampon pour le
domaine. Cette zone est appele log d'interruption. Une fois que le systme est de
nouveau capable de traiter les interruptions, il tente de traiter toutes les interruptions
en attentes. Cette tape permet de re-synchroniser les domaines.
34/104
L'utilisation d'Adeos - L'utilisation d'Adeos
7 En effet, Adeos (et donc, le systme Xenomai) repose sur l'application d'un patch sur les
sources du noyau Linux.
35/104
Rapport de projet de fin d'tude
objet est cr, simultanment, une entre est cre dans un registre. Ensuite, tout
autre service qui veut utiliser l'objet utilise le nom symbolique (de l'objet) pour
retrouver l'entre correspondante dans le registre. Le nom de l'objet sert de cl
pour retrouver l'entre dans l'index. C'est finalement la structure identifiant l'objet,
dans le registre ( xnhandle_t ), qui contient le descripteur de l'objet. La structure
d'index partag permet de centraliser les donnes.
36/104
Le temps-rel dans le mode secondaire - Le temps-rel dans le mode secondaire
Toutefois, lorsque le second domaine ordonnance ses processus et dcide de celui qu'il
va excuter, toutes les tches (temps-rel ou non temps-rel) rentrent en
comptition. Il faut comprendre qu'une tche temps-rel dans le second domaine,
bien qu'ayant une priorit plus leve qu'une tche quelconque, devra rgulirement
laisser sa place pour l'excution d'autres tches. Le systme Linux conserve son
caractre de systme multi-tches.
Les tches doivent tre prservs des problmes d'inversion de priorit. Xenomai le
fait nativement, mais seul le noyau Linux patch avec PREEMPT_RT permet cette
protection. Il faut donc continuer vrifier les diffrents cas si l'on utilise un systme
Xenomai bas sur la branche principale du noyau Linux.
37/104
Rapport de projet de fin d'tude
Les appels systmes invoqus par les applications temps-rels dans l'espace
utilisateur sont redirigs vers le noyau depuis l'espace utilisateur grce une librairie
spcifique de Xenomai : libnative.so.
On peut crer des modules temps-rels qui font appels aux services du micro-noyau.
Cette approche, qui ressemble celle prconise par d'autres systme temps-rel
(RTAI, notamment), n'est pas privilgier. Il est prfrable d'avoir des applications
temps-rels, vitant ainsi que le noyau ne soit compltement bloqu (et impose un
redmarrage du systme) cause d'une erreur d'excution du module temps-rel.
Dans cette API, on fait appel aux services apports par le noyau temps-rel l'aide
d'appels systmes spcifiques. Parmi ces appels, on retrouve :
le management des tches temps-rel
Il existe un certain nombre d'appels systmes pour crer ou dtruire des
descripteurs de tches temps-rels. La cration et le dmarrage des tches est
indpendant ( l'oppos de l'API POSIX, par exemple). Il est ainsi possible
d'imaginer des fonctions qui se chargent d'initialiser tout les objets et d'autres
qui se chargent de les dtruire. Le lancement des traitements est alors
clairement indiqu l'endroit o l'opration doit tre effectue.
Il est possible d'introduire des mcanismes d'attentes entre les tches. On peut
aussi explicitement dclarer une tche comme tant priodique, ou lui imposer
un dlai d'attente. Il est possible qu'une tche fasse des appels
l'ordonnanceur, pour elle mme ou pour une autre tche. On peut donc
imaginer un modle o une tche principale coordonne l'activit de toutes les
38/104
L'API native temps-rel - L'API native temps-rel
autres.
la gestion du temps
Les principaux mcanismes consistent grer des compteurs de temps. La
particularit de l'API Xenomai se situe dans sa capacit adresser une horloge
plusieurs horloges, en fonction des besoins de l'utilisateur. De plus, il est
possible, au moment de la compilation, de choisir si l'horloge systme compte
le temps en ticks ou en unit de temps (nano-seconde, par exemple). L'API
propose alors des mthodes de conversions.
Le fait de ne compter qu'en ticks systme permet de rduire la charge en
ce qui concerne la conversion des donnes brutes en units comprhensibles
un niveau macroscopique. Par contre, il faut valuer l'effet des masquages
d'interruptions et l'irrgularit apporte la base de mesure.
la synchronisation entre tches
Dans cette section, il faut prendre en compte les mthodes qui permettent
d'utiliser des mutexs , des smaphores . Ce sont essentiellement les
appels pour crer l'objet, le retrouver depuis son nom symbolique, le dtruire et
effectuer les oprations de bases de cet objet (acqurir ou librer, dans le cas
des mutex ).
la communication entre tches
La communication entre les tches peut se faire par le biais de files de
messages, de tubes inter-processus (IPC) ou de portions de mmoire
partages.
Le premier mcanisme est gnralement utilis au sein d'un mme programme
qui est multi-thread. Le second est utilise entre deux (ou plus) processus
indpendant qui ne se connaissent pas ncessairement au moment du
dmarrage.
39/104
Rapport de projet de fin d'tude
40/104
Travail ralis
Portage et valuation de Xenomai sur une plateforme PC/104
Rapport de projet de fin d'tude
1. Environnement de dveloppement
Parce que le matriel et les performances du systme embarqu ne sont pas
suffisantes pour dvelopper les logiciels ncessaires (car, pas destines cet usage),
on choisit gnralement de dporter le dveloppement sur un ordinateur plus
puissant. Le choix au sein du centre de service eLiSe est de faire le dveloppement
sur un ordinateur de type PC. Ce systme hte, sur lequel j'ai effectu le
dveloppement du systme (rcupration des sources, paramtrage, compilation...),
fait fonctionner la version la plus jour de la distribution Ubuntu. De cette faon, il n'y
a pas de diffrences entre le type du systme hte et du systme cible (tout deux de
type Linux).
Pour effectuer le portage de Xenomai, j'ai du commencer par organiser mon
environnement de dveloppement. Ensuite, j'ai du apprendre utiliser des outils
spcifiques au dveloppement. Enfin, j'ai install les outils de compilation croise.
42/104
L'arborescence de travail - L'arborescence de travail
43/104
Rapport de projet de fin d'tude
de sa propre machine pour effectuer son travail. Toutefois, tout les postes sont en
rseau et peuvent accder des ressources communes, disponibles sur un serveur. Le
serveur est appel gforge .
En plus de pouvoir rcuprer les donnes depuis le serveur (en faisant de la copie
tunnele par SSH), il a t mis en place un systme de montage de dossier par NFS.
Ainsi chaque ordinateur peut accder un dossier nomm partage dont le contenu
est sur le serveur.
44/104
Portail de collaboration : Trac - Portail de collaboration : Trac
1.3.1. Contraintes
La compilation vers la carte Viper ncessite des outils capables de fonctionner sur le
PC hte, et capables de produire des binaires compatibles avec le matriel prsent sur
la carte : ce sont les outils de compilation croise (compilateur, diteur de liens...).
On notera que le compilateur doit tre assez rcent pour pouvoir supporter les options
de compilation lies au standard EABI. C'est au cours de la premire compilation de
Xenomai que ce point a t soulev. J'avais commenc par installer et utiliser les
outils fournis sur les Cds livrs avec la carte. Mais la version de cette chane de
compilation tait trop vieille et ne supportais pas les options lies EABI. Il a fallu
45/104
Rapport de projet de fin d'tude
1.3.2. Dpaquetage
L'installation des outils est trs simple. On commence par aller chercher le paquet qui
contient les outils, depuis le dossier de partage /media/nfs/partage/viper/ :
cp /media/nfs/partage/viper/arm-2008q1-126-arm-none-linux-gnueabi-i686-
pc-linux-gnu.tar.bz2 ~
PATH="/usr/local/arm/arm-2008q1/bin:/usr/local/bin[...]"
arm-none-linux-gnueabi-gcc --version
46/104
Tests de l'environnement - Tests de l'environnement
et de sa configuration.
Pour tester le fonctionnement du logiciel, j'ai men la compilation de plusieurs autres
sources. En particulier, j'ai compil un noyau Linux non patch et ses modules. Cet
excutable a t utilis au cours des essais du chargement du noyau par TFTP
expliqu dans la partie 2.3.1.. J'ai aussi compil le logiciel BusyBox.
Le fait que les excutables (noyau Linux, BusyBox) fonctionnent correctement permet
de valider le bon fonctionnement du compilateur, du bon droulement de l'dition de
lien sur la librairie C... On peut considrer qu'un excutable aussi sensible que le
noyau est un test appropri pour la validation.
RedBoot>fconfig
47/104
Rapport de projet de fin d'tude
48/104
Liaison Ethernet et console Telnet - Liaison Ethernet et console Telnet
telnet 192.168.0.118
La connexion par Ethernet prsente un dfaut majeur : on ne peut pas avoir accs
aux informations de la console noyau au cours du dmarrage. En effet, le noyau est
capable d'afficher les informations de dmarrage sur un port srie car il charge un
minimum de support pour une liaison de ce type. La mme chose ne peut tre faite
avec le port Ethernet, ce qui ncessiterait de charger toute la pile rseau au pralable.
Entre le moment o RedBoot passe la main au dmarrage du noyau et le moment o
le systme est pleinement oprationnel, il n'y a aucun programme en coute sur le
port Ethernet.
49/104
Rapport de projet de fin d'tude
procdure de copie sur la mmoire Flash de la machine. De plus, la mmoire Flash est
limite en terme de nombre de recopies. On vite donc d'user prmaturment la puce
mmoire.
J'ai choisi de le recopier en grande partie le script de dmarrage qui tait prsent
l'origine sur la carte Viper. J'ai modifi deux lignes de faon rendre la procdure
possible :
RedBoot>ip_address -l 192.168.60.118
RedBoot>load -r -b %{FREEMEMLO} -h 192.168.0.117 -m tftp zImage-2.6.28-xeno
Ce qui fait que le noyau reoit cette ligne de paramtres lorsque le script de
dmarrage excute la commande :
RedBoot>exec -c %{cmdlinenfs}
50/104
Cration du systme de fichier - Cration du systme de fichier
3.1. Motivations
Au cours des premiers tests, je devais normalement rutiliser un systme de fichier
existant. Malheureusement, ce systme de fichier a t cr de faon autoriser
seulement des sessions utilisateurs avec mot de passe. Les mots de passe n'taient
pas ceux traditionnellement utiliss au sein du centre eLiSe ou fixs par le
constructeur de la carte.
Pour contourner ce problme, j'ai tent de passer des arguments au noyau. Pour cela,
j'ai modifi la chane de paramtres passe au noyau dans le script de dmarrage de
RedBoot. Par exemple, j'ai tent de passer l'argument -S pour faire initialiser le
systme en mode utilisateur unique. J'ai dcouvert que cette option ne permet pas de
dbloquer le systme. En effet, le systme de fichier tait issus d'un distribution
Debian modifie. Dans les distributions de ce type, le fait de passer l'argument -S
sous-entend que l'utilisateur unique est l'administrateur du systme ; il est tout de
mme demand le mot de passe de ce super-utilisateur.
J'ai aussi tent de donner directement le chemin de la premire application lancer
grce au paramtre init . J'avais donc un alias du type :
RedBoot>alias cmdline="init=/bin/sh"
Dans ce cas, l'application doit effectivement dmarrer mais elle ne se place pas en
attente sur le port srie. Il n'est donc pas possible d'avoir un environnement de travail
depuis l'interprteur de commande.
Enfin, j'ai tent de faire dmarre l'application getty de la mme faon que
prcdemment (en donnant le chemin vers cet excutable). Cette application sert
d'intermdiaire : elle se place en coute sur le port srie et est cens dmarrer un
interprteur de commande quand elle dtecte une connexion. En fait, il est d'abord
fait appel sulogin (qui se charge de grer l'authentification de l'utilisateur) avant
de dmarrer un interprteur de commande.
J'ai dcouvert seulement plus tard, dans les pages du manuel, que le programme
sulogin lis les fichier /etc/passwd et /etc/shadow. C'est pour cela qu'il demande
le mot de passe du super utilisateur. Si ces fichiers n'existent pas, le mot de passe
n'est pas demand. Peut-tre aurait-il fallu supprimer les deux fichiers pour ne pas
avoir de demande de mot de passe.
Au final, je n'ai pas russi passer outre cette protection par mot de passe. En accord
avec mon encadrant, il a t dcid de crer entirement un systme de fichier. Ce
choix a t fait pour contrer le problme mais il se rvle, dans le cadre de ma
formation, que c'est une dmarche instructive pour la comprhension globale d'un
systme. De plus, dans le cadre des systmes embarqus, le fait de crer soi-mme
le systme de fichier permet de s'assurer que l'on garde des proportions acceptables
en terme de taille mmoire. J'ai fait cela en suivant diffrentes dmarches dcrites
dans Building Embedded Linux Systems ou dans Linux From Scratch 10 (LFS).
51/104
Rapport de projet de fin d'tude
Une autre raison qui conforte dans la cration d'une nouvelle arborescence de fichier
est la capacit maintenir et finement adapter le systme la carte. En effet, j'ai
tent plusieurs fois de copier une arborescence de fichier d'une distribution existante
(Debian et OpenSuse) et de la simplifier pour qu'elle s'adapte la carte,
malheureusement, ceci aboutit des erreurs qu'il est difficile de retracer.
52/104
Les directives du FHS - Les directives du FHS
53/104
Rapport de projet de fin d'tude
for i in {{0..4},{64..67}} ; do
if [ $i -lt 64 ] ; then
j=$i
else
j="S$(($i-64))"
fi
mknod -m 600 tty$j c 4 $i
done
J'utilise la liste des numros mineurs au sein de la boucle for . Selon que le
numro mineur est infrieur (pour les terminaux) ou suprieur (pour les terminaux
srie) 64, je modifie l'indice qui apparat la suite de la chane de caractres
tty .
J'ai du aussi crer un dossier /dev/pts/ qui est mont au cours du dmarrage. Il
permet de crer des pseudo-terminaux. Les pseudo-terminaux tant des programmes
qui simulent le fait que l'on se connecte un terminal. Il tait ncessaire de crer et
de monter ce dossier au dmarrage, en particulier pour pouvoir utiliser Telnet.
Enfin, j'ai cr quatres liens symboliques dans le dossier /dev/. Un programme, au
cours de son excution, doit pouvoir accder son entre standard et ses sorties
(standard et erreur). Ainsi, j'ai d'abord commenc par crer /dev/fd qui est un lien
symbolique vers /proc/self/fd, puis j'ai rajout les liens vers les descripteurs de
fichiers usuels : entre standard (stdin), sortie standard (stdout), sortie d'erreur
(stderr). J'ai rajout ces oprations dans le script prcdent en ajoutant :
ln -s /proc/self/fd /dev/fd
j=0
for i in {in,out,err} ; do
ln -s /dev/fd/$((j++)) /dev/std$i
done
3.3. Applications
Un certain nombre d'applications sont absolument ncessaires pour faire fonctionner
un systme GNU/Linux.
3.3.1. SysVinit
Les systmes de type GNU/Linux utilisent gnralement le systme de dmarrage dit
SysVinit (comprendre System V init , en rapport avec l'apparition de ce
systme dans la version 5 de Unix distribue par AT&T). Particulirement, la
procdure de dmarrage ncessite la prsence de l'application (init). D'autres outils
sont aussi utiliss pour grer l'extinction du systme.
54/104
SysVinit - SysVinit
J'ai commenc par rcuprer les sources de ce systme. Puis, j'ai effectu la
compilation croise de toutes les applications composant le systme en donnant le
nom du compilateur (avec l'option CC) :
cd ~/xenomai/sysapps/sysvinit-2.86/src
make CC=arm-none-linux-gnueabi-gcc
Il est a noter que, dans la logique d'un systme embarqu, je n'ai pas install la
documentation associe aux programmes. Pour cela, j'ai parcouru le fichier Makefile
pour trouver les oprations correspondant l'installation des pages du manuel et les
commenter pour qu'elles ne soient pas excutes. Ceci est possible car le fichier a
vraisemblablement t rdig la main (il n'est pas issu d'une gnration
automatique). Il reste clair et comprhensible. Il est donc facile de trouver la cible
install et de commenter les lignes :
install:
[...]
for i in $(MAN1); do \
$(INSTALL) -m 644 ../man/$$i $(ROOT)$(MANDIR)/man1/; \
done
[...]
Une fois ces lignes commentes, j'ai install les programmes dans le futur systme de
fichier de la carte (grce l'option ROOT). J'ai donn en paramtres le numro
d'identifiant et le numro du groupe de rfrence de mon identit sur le PC de
dveloppement. Cela vite de donner l'appartenance de ces applications au super
utilisateur et de devoir changer d'identifiant pour diter les applications au cours du
dveloppement.
3.3.2. BusyBox
Les systmes embarqus disposent gnralement de peu de mmoire ; que ce soit de
la mmoire vive (utile au cours du fonctionnement) ou de la mmoire Flash (pour la
sauvegarde des donnes lorsque le systme est hors tension). Pour donner un ordre
d'ide, la carte que j'ai utilis au cours de mon stage possde 64Mo de SRAM et 32Mo
de Flash11.
Pour rpondre ces contraintes, il a t dvelopp le logiciel BusyBox. Il regroupe
dans un seul excutable une grande majorit des commandes usuelles (cat, rm, ls...)
qui composent la suite de logiciels appele GNU Core Utilities.
Plutt que de compiler le paquet coreutils, il a t choisit d'utiliser cette application.
11 Un prsentation dtaille la carte Viper est faite en page 80, en Annexe
55/104
Rapport de projet de fin d'tude
C'est pour cela que j'ai rcupr les sources de ce logiciel avec git :
cd ~/xenomai/sysapps
git clone git://busybox.net/busybox.git
Il faut introduire le fait que BusyBox implmente une version simplifi de init.
Malheureusement, dans une premire version de mon systme de fichier, je n'ai pas
russit faire fonctionner cette implmentation de faon ce que les scripts de
dmarrage soient excuts. Des recherches sur Internet ont souleves que ce
problme tait courant : l'application BusyBox semble n'utiliser que le fichier
/etc/inittab et n'excute pas les scripts qui peuvent apparatre dans ce fichier.
Hors, suite au problme de connexion srie12, j'avais besoin que le processus init soit
capable de configurer les interfaces rseau et de dmarrer un serveur Telnet, ce qu'il
ne faisait pas.
J'ai donc dcid d'utiliser SysVinit pour le dmarrage et BusyBox pour les autres
applications. J'ai donc d prter attention la configuration de compilation de
BusyBox. J'ai commenc par appliquer la configuration par dfaut. Ensuite, j'ai
recens les applications prsentes dans SysVinit. Finalement, j'ai configur BusyBox
de faon ce que les diffrents liens qui auraient pu entrer en conflit ne soient pas
crs.
Pour appliquer la configuration par dfaut, il faut donner la cible defconfig
make. Le reste de modifications se fait de manire interactive en utilisant le menu de
configuration. Il faut donc donner la cible menuconfig make :
cd ~/xenomai/sysapps/busybox
make CROSS_COMPILE=gnu-none-linux-gnueabi- ARCH=arm defconfig
make CROSS_COMPILE=gnu-none-linux-gnueabi- ARCH=arm menuconfig
Puis, j'ai compil le logiciel en donnant la cible install de faon ce que les
objets compils soient installs dans le squelette de l'arborescence de fichier systme
(grce l'option CONFIG_PREFIX) :
Une fois ces oprations termins, j'ai pu vrifier qu'il n'a t cr qu'un seul
excutable (qui a t plac dans le dossier /bin/). Toutes les autres commandes sont
en fait des liens symboliques vers cet excutable :
56/104
BusyBox - BusyBox
ls -l ~/xenomai/rootfs/bin
lrwxrwxrwx 1 root root 7 2009-05-27 addgroup -> busybox
lrwxrwxrwx 1 root root 7 2009-05-27 adduser -> busybox
lrwxrwxrwx 1 root root 7 2009-05-27 ash -> busybox
-rwxr-xr-x 1 root root 822620 2009-05-27 busybox
[...]
3.4. Dmarrage
57/104
Rapport de projet de fin d'tude
58/104
Le serveur inetd - Le serveur inetd
# Telnet server:
telnet stream tcp nowait root /usr/sbin/telnetd telnetd -i
En fait, le fichier /usr/sbin/telnetd n'est qu'un lien vers BusyBox. Hors, BusyBox
fonctionne de la faon suivante : il dcide de mimer l'excution du programme dont il
reoit le nom comme premier argument. Donc, selon la rdaction que j'ai faite du
fichier, la ligne de commande suivante est excute (aprs remplacement du lien par
l'excutable point) et prend tout son sens :
busybox telnetd -i
59/104
Rapport de projet de fin d'tude
Telnet lance le programme responsable de cette tche. Le programme qui initie les
sessions utilisateurs (identification, puis lancement d'un interprteur de commande)
s'appelle getty. Lorsque cet outil dmarre, il s'attache une interface lui donnant
l'impression qu'il est raccord un terminal srie. En l'occurrence, il tente d'ouvrir le
priphrique raccord au fichier /dev/ptmx.
Comme le montre le schma 14, la notion de pseudo-terminal apparat dans le
mcanisme qui relie le priphrique ouvert par le programme getty (/dev/ptmx) au
descripteur de fichier dtenu par le serveur Telnet (et mont dans le dossier
/dev/pts/). Cette notion cache au programme getty que la communication ne se fait
pas par le biais d'un terminal, mais par le rseau Ethernet.
Une fois que j'ai dcouvert cette ncessit, j'ai rajout le dossier et le fichier dans le
dossier /dev/. J'ai aussi rajout, dans l'un des scripts de dmarrage que j'ai crit, une
opration analogue :
4. Portage de Xenomai
~/xenomai/xenomai-2.4/scripts/prepare-kernel.sh \
>--linux=~/xenomai/linux-2.6.28.y \
>--arch=arm \
>--adeos=~/xenomai/xenomai-2.4/ksrc/arch/arm/patches/adeos-ipipe-
2.6.28-arm-1.12.00.patch
60/104
Patch du noyau - Patch du noyau
make viper_defconfig
Des fichiers par dfaut, pour les architectures ARM supportes par la communaut de
dveloppement du noyau Linux, se trouvent dans le dossier arch/arm/configs/ des
sources. Le prcdent responsable du centre eLiSe avait effectu le portage du noyau
Linux sur la carte Viper. Il avait donc cr le fichier de configuration par dfaut de la
carte et l'avait soumis la communaut.
J'ai du adapter la configuration du noyau ( partir de cette configuration par dfaut)
pour rpondre parfaitement aux contraintes de Xenomai. Par exemple, j'ai du enlever
les options qui permettent normalement d'avoir une diminution de la consommation
d'nergie : l'adaptation de la frquence du processeur en fonction de la charge et la
mise hors tension des priphriques lorsqu'ils sont inactifs. Ces deux options sont
susceptibles d'induire des variations dans la frquence de rafraichissement des
horloges du systmes et donc, peuvent crer des latences non dsires. Ce point
particulier est soulev dans le fichier TROUBLESHOOTING, prsent dans les sources de
Xenomai.
61/104
Rapport de projet de fin d'tude
Une fois que la compilation avait t correctement mene, j'utilisais l'une des cibles
du Makefile pour installer les modules dans le dossier contenant les objets compils.
Cette cible s'appelle modules_install et doit tre utilis avec l'argument
INSTALL_MOD_PATH .
make INSTALL_MOD_PATH=~/xenomai/images/modules-2.6.28-xeno \
>modules_install
62/104
Mise en place du noyau - Mise en place du noyau
cd $build
cp vmlinux ~/xenomai/images/vmlinux-$version
cp arch/arm/boot/zImage ~/xenomai/images/zImage-$version
cp System.map ~/xenomai/images/System.map-$version
cp .config ~/xenomai/images/$version.config
cp -a ~/xenomai/images/modules-2.6.28-xeno/* ~/xenomai/rootfs
63/104
Rapport de projet de fin d'tude
cd ~/xenomai/build_xeno
~/xenomai/xenomai-2.4/configure \
>--host=arm-none-linux-gnueabi \
>--enable-arm-mach=pxa \
>--enable-arm-eabi
J'ai remarqu qu'il ne fallait pas changer l'option --prefix lorsque je faisait
fonctionner le script l'tape prcdente. En effet, l'option indique le dossier dans
lequel les lments seront installs dans le systme de fichier. L'option DESTDIR ,
dans la commande de make, indique le dossier de copie des lments. Dans notre
cas, c'est en modifiant ce paramtre que l'on pointe vers la racine du systme de
fichier de la carte Viper. Au final, les lments sont installs dans
$DESTDIR/usr/xenomai.
Pour une utilisation finale, sur un systme embarqu, il aurait fallut que je veille ne
pas installer la documentation et les librairies statiques (dont l'extension est .a ).
5. valuation de Xenomai
64/104
Visualisation de la console - Visualisation de la console
Dans le cas o le noyau subit un crash, il fournit toujours des informations sur la
console. Il donne une trace des dernires instructions qui ont t excutes sur le
processeur. Il donne aussi la valeur des tout les registres au moment de l'erreur
fatale.
Par exemple, j'ai utilis cette information pour me faire aider sur la mailing-list de
Xenomai. Cette information a permis l'un des mainteneurs de pointer une erreur sur
la compilation des librairies de Xenomai. En effet, la trace des dernires instructions
indiquait que les applications tentaient d'utiliser des instructions de calcul flottant
alors que le processeur XScale de la carte Viper ne possde pas d'unit de calcul de ce
type.
65/104
Rapport de projet de fin d'tude
dd if=/dev/zero of=/dev/null
Les informations sur le fonctionnement des applications (dans les pages de manuel)
sont trs succinctes. J'ai donc du rapidement parcourir le code source des applications
66/104
La suite de tests - La suite de tests
5.3.1. Clocktest
Dans un systme, il existe gnralement plusieurs compteurs qui servent d'horloge.
En particulier dans les systmes multi-processeurs, chaque CPU possde sa propre
horloge. Chaque horloge qui est redfinie doit rester synchronise avec une horloge
de rfrence. L'application clocktest permet de mesure l'cart une horloge et
l'horloge de rfrence, ainsi que l'cart entre les horloges de diffrents CPUs.
Cette application repose sur un thread qui est lanc de faon cyclique. D'une fois sur
l'autre, la priode de mesure est alatoire (comprise entre 1 et 1,1ms). Au cours
d'une priode, le thread relve diffrents couples de valeurs depuis l'horloge de
rfrence et l'horloge teste. En comparant la diffrence des valeurs fournies par ces
deux horloges, il se dfinit un instant de rfrence pour la priode de mesure. Cet
instant de rfrence est le moment o la phase (la diffrence) entre les deux horloges
est minimale.
Le programme dfinit alors :
le dcalage ( offset ) comme la diffrence entre les deux valeurs obtenues
(depuis l'horloge de rfrence et l'horloge teste) au moment o la phase est
minimale
per_cpu_data->drift =
(clock_val[idx] - per_cpu_data->first_clock) /
(double)(tod_val[idx] - per_cpu_data->first_tod) - 1;
67/104
Rapport de projet de fin d'tude
5.3.2. Cyclic
Une demande d'ordonnancement priodique de threads repose sur des compteurs (les
timers , en anglais). Le but de ce programme est de mesurer les latences lis ces
timers .
Pour cela, le programme cre un certain nombre de threads qui sont ordonnancs par
Xenomai. Une fois que ces threads sont dmarrs, la tche main se contente
d'afficher les statistiques des threads au minimum toutes les 10000s (il y a un appel
la fonction usleep).
Chacun des threads, lorsqu'il est cr, utilise la mme routine. Cette routine repose
principalement sur une boucle. Pendant la priode o le main est en sommeil, les
threads ont le temps d'effectuer plusieurs boucles. Pendant ces boucles, ils font la
diffrence entre une mesure du compteur et une mesure prcdente du compteur.
Une fois cette mesure collecte, ils mettent jour leurs statistiques : la latence
minimale, actuelle, moyenne et maximale.
L'application donne une ligne d'en-tte. Cet en-tte est la recopie exacte du contenu
du fichier /proc/loadavg. Dans les pages du manuel, on trouve que les trois premiers
chiffres sont la moyenne du nombre de processus dans la file des processus (prt
tre excutes), moyenns sur 1, 5 et 15 minutes. Le quatrime champ reprsente le
nombre d'entits (processus ou thread) dans l'tat RUNNING ou UNINTERRUPTIBLE,
rapport sur le nombre d'entits prsent dans le systme. Le dernier champ est le PID
du dernier processus dmarr.
Le programme prsente pour chacun des threads un certain nombre
d'informations : le numro du thread dans l'application (ainsi que son TID15, au niveau
systme), la priorit pour le systme Xenomai, le compteur interne de la boucle active
et la latence minimale, actuelle, moyenne et maximale.
5.3.3. Klatency
Pour faire fonctionner cette application, il est gnralement ncessaire de charger un
module noyau spcifique (la ncessit d'insrer le module dpend du choix qui a t
fait la compilation). On insre le module en utilisant la commande modprobe :
modprobe xeno_klat
15 TID : Thread ID. Dans un programme non multi-thread, le TID est identique au PID. Dans
le cas inverse, chaque thread d'une mme application possde un identifiant unique (TID) et
partagent le PID de l'application.
68/104
Klatency - Klatency
module dont il dpend (le quatrime champ) et l'tat (l'avant dernier champ).
Le principe de ce test est de mesurer les latences pour une tche priodique de 100s
fonctionnant en mode noyau.
5.3.4. Latency
Ce programme est crit en utilisant l'API native Xenomai. Il a pour but de mesurer les
latences d'excution de faon logicielle.
Le programme main a pour seule fonction de crer et de dmarrer deux tches. La
premire s'occupe de la mesure des latences et ne fait pas d'appels des fonctions de
la libc standard. Ainsi, elle reste continuellement ordonnance par Xenomai. La
seconde qui s'occupe de l'affichage voit ncessairement ses contraintes de priodicit
relches.
Puisque la tche d'affichage n'a pas de priodicit, mais effectue ses activits en
synchronisation avec la tche de mesure grce un smaphore, la tche de mesure
peut effectuer plusieurs mesures lors d'une priode d'affichage. Donc, les lignes
commenant par RTD (Real Time Data) affichent :
la gigue minimale sur une priode d'affichage
la gigue maximale sur une priode d'affichage
la gigue minimale sur la dure du test
la gigue maximale sur la dure du test
la gigue moyenne sur la dure du test
Le programme insre parfois une ligne commenant par RTT (Real Time Task) donnant
un rappel de l'activit en cours. Cette ligne comprend une indication du temps
d'excution de la tche depuis le dbut du test.
La tche de mesure est cens faire des mesures avec la priodicit indiqu, pendant
une seconde. Lorsque la seconde est passe, le groupe de mesures constitue un
chantillon qui est mis--jour dans un histogramme. Une fois que la mise jour est
faite, un signal sur le smaphore prvient la tche d'affichage. Le cycle recommence
par la r-initialisation des valeurs minimale et maximale de gigue et le nombre de
dpassements.
Si la tche met plus que la dure de la priode pour complter sa mesure, elle
manque un (ou plusieurs) point de libration priodique. Le nombre de points de
librations manqus peut tre comptabilis (grce l'appel rt_task_wait_period).
Lorsque ce cas se prsente, le nombre de cycles manqus est comptabilis et la tche
tente de se recaler avec le prochain point de libration.
5.4. Rsultats
69/104
Rapport de projet de fin d'tude
issus d'une prcdente application qui permettait le test des compteurs haute
rsolution. Dans le code source de cette application, la distinction entre le traitement
et la mesure n'est pas clair. Par exemple, la boucle qui fait la mesure des latences ne
fait pas que cette opration : elle se charge aussi de faire plusieurs traitements sur les
donnes. De plus, l'introduction d'une diffrence entre les priodes des threads pose
question. Il serait plus logique d'avoir des threads de priorits diffrentes. Une
situation de concurrence de l'accs au processeur devrait tre pris en charge par
l'ordonnanceur et ne pas tre vite dans l'implmentation du test.
root@viper:$ ./clocktest/run
*
*
* Type ^C to stop this application
*
*
== Tested clock: 0 (CLOCK_REALTIME)
CPU ToD offset [us] ToD drift [us/s] warps max delta [us]
--- -------------------- ---------------- ---------- --------------
0 -5.4 -0.001 0 0.0
70/104
Analyse des mesures de latency - Analyse des mesures de latency
Lorsqu'il n'y a pas de dpassements, on peut imaginer que la diffrence entre la dure
de la priode et la latence maximale constitue le temps restant pour l'excution de la
tche, de la manire suivante :
En ralit, cette premire impression est fausse : les dpassements de "release point"
interviennent mme lorsque l'on prsente un priode plus grande que le temps
restant valu (comme le montre le dernier listing).
La priorit de la tche n'a pas d'influence sur les latences rencontres. Dans le cas
prsent, cela s'explique par le fait que la tche s'excute sans aucune autre charge
pour le systme (la tche d'affichage tant bascul dans le domaine Linux).
6.1. Ralisations
71/104
Rapport de projet de fin d'tude
72/104
Le management des tches - Le management des tches
suppression des ressources. Il est important de bien faire appel la paire d'appels :
rt_task_create()
rt_task_delete()
RT_QUEUE queue;
rt_queue_create()
rt_queue_delete()
La tche temps-rel peut mettre ses donnes dans la file les uns la suite des autres
(dans le cas d'une FIFO17) sans ncessairement se proccuper de la frquence
laquelle les autres tches vident la file.
Lorsqu'une donne sert d'change entre plusieurs tches, il est prfrable de dclarer
un mutex . Grce une structure de ce type, on protge la donne en restreignant
la portion de code o l'on fait des modifications. Si l'on veut conserver le temps-rel
dans le systme (ne pas bloquer les activits de trop de tches, trop longtemps), cela
sous-entend que les oprations apports sur la donne soient brves. Il y a donc des
rgles qui surgissent :
on n'utilise gnralement pas des appels systmes Linux dans ces portions
protgs (pas d'affichage avec printf, par exemple) pour limiter les
changements de domaines.
on dporte les traitements sur la variable dans les portions non protges (par
contre, on protge une lecture ou une assignation de la valeur)
73/104
Rapport de projet de fin d'tude
cd ~/xenomai/debug/buil_gdbserver
../../sysapps/gdb/configure --target=arm-none-linux-gnueabi\
>--prefix=~/xenomai/sysapps/gdbserver
make
make install
Sur la machine hte, il faut lancer le dbogueur avec une copie de l'application,
compile avec les symboles de dboguage. Ensuite, dans l'invite de commande de
gdb, on indique que la cible se trouve sur une autre machine (on prcise donc
l'adresse IP de la machine sur laquelle fonctionne le serveur et le port d'coute).
arm-none-linux-gnueabi-gdb application
(gdb)remote target 192.168.0.117:2345
Dans le livre de Karim Yaghmour, il est indiqu que le dbogueur doit tre compil en
indiquant le type d'application qui sera dbogu. Il faudrait donc utiliser les outils de
compilation croise. En fait, je n'ai pas eu besoin de mener cette tape parce que
l'environnement de compilation croise que j'ai mis en place comportait dj un
dbogueur pour les applications fonctionnant sur ARM.
74/104
Le traage des appels systmes - Le traage des appels systmes
cd ~/xenomai/debug/build_strace/
CFLAGS=~/xenomai/linux-2.6.28.y/include\
>~/xenomai/sysapps/strace-4.5.18/configure\
>--prefix=~/xenomai/debug/strace\
>--host=arm-none-linux-gnueabi
[...]
make
make install
cd ~/xenomai/sysapps/strace-4.5.18/
patch -p1 <~/xenomai/archives/strace_patch
La commande patch est simple d'utilisation : il suffit de spcifier le fichier de patch sur
l'entre standard de la commande et la valeur de l'option -p. Cette dernire option
75/104
Rapport de projet de fin d'tude
permet de supprimer la premire partie des chemins vers les fichiers modifier,
indiqus dans le fichier de patch et qui sont de la forme :
--- a/linux/arm/syscallent.h
+++ b/linux/arm/syscallent.h
Une fois que le programme est plac dans le systme de fichier de la carte Viper, son
utilisation permet de gnrer des fichiers textes donnant la liste des appels systmes
passs par l'application. J'ai parfois d aller voir l'implmentation des appels dans les
sources de Xenomai pour trouver o dbute et o commence vritablement l'appel
systme.
Il est possible de suivre les appels systmes des diffrentes tches d'une
application en faisant :
strace -c nom_de_application
76/104
Conclusion
L'tude du portage de Xenomai sur la carte Viper a mis en avant la faisabilit de cette
opration. Elle est cens illustrer les performances de la carte.
Il pourrait tre envisag d'utiliser cet environnement dans le cadre du dveloppement
d'une application de robotique, par exemple. On pourrait aussi tudier la faisabilit du
portage de l'environnement Orocos sur la carte.
D'un point de vue personnel, j'ai appris de nombreuses choses sur les systmes Linux,
sur les spcificits des systmes embarqus, sur les systmes temps-rels. D'un point
de vue plus pratique, j'ai appris utiliser un nombre important d'applications servant
au dveloppement d'applications, et pas seulement pour l'intgration de systme.
J'espre pouvoir mettre en avant cette exprience lors de ma recherche d'emploi et
ainsi, continuer travailler dans ce domaine.
77/104
Rapport de projet de fin d'tude
Ouverture
Suite des problmes essentiellement administratifs, je n'ai pas pu faire mon stage
dans le laboratoire de robotique mobile de l'universit du Minnesota, aux tats-Unis.
J'ai commenc le stage concernant le portage de Xenomai sur la carte Viper au mois
d'avril. la date du 02/09/09, il me reste encore 3 semaines avant la fin de mon
stage. J'espre donc avoir le temps d'approfondir encore quelques points. En
particulier, j'espre pouvoir utiliser compltement le traceur du pipeline d'interruption
et ainsi mettre jour les causes de latences. J'espre aussi pouvoir explorer le code
de l'application klatency et donner quelques rsultats sur l'impact du contexte
d'excution sur les latences.
78/104
Annexes
Rapport de projet de fin d'tude
80/104
Annexes - Caractristiques de la carte Viper
A.2. Mmoire
Sur la carte Viper, on trouve quatre types de mmoire :
4. 32Mo d'Intel StrataFLASH pour contenir des donnes (systme de fichier, par
exemple)
5. 1Mo de Flash de type EPROM pour contenir le chargeur d'amorage (RedBoot).
C'est cette mmoire qui est accde par le processeur au moment de sa mise
sous tension.
6. 256Ko de SRAM
7. 64Mo de SDRAM pour la mmoire principale du systme. On a accs 16Mo de
mots de 32bits. En fait, il y a deux puces mmoires contenant chacune quatre
banques de mmoires de 4Mo, de mots de 16bits.
La mmoire principale est accde par le bus principal, cadenc 100MHz.
81/104
Rapport de projet de fin d'tude
82/104
Annexes - Rsultats du programme latency
83/104
Rapport de projet de fin d'tude
84/104
Annexes - Rsultats du programme latency
85/104
Rapport de projet de fin d'tude
C.1. Concepts
L'historique est contenu dans des fichiers rfrencs par des object name . Un nom
est le hach (en utilisant la mthode SHA1) du contenu de ce fichier. Il est donc
reprsent par une chane de 40 caractres du type :
6ff87c4664981e4397625791c8ea3bbb5f2279a3.
Avec cette mthode, il est virtuellement impossible d'avoir deux objets diffrents avec
le mme nom.
C.1.1.1. Blob
Un blob retient un contenu binaire quelconque. C'est gnralement le contenu
d'un fichier. On notera que le blob ne retient pas le nom du fichier. C'est en accord
avec le principe que git retient le contenu, pas le fichier ! Deux lments qui auraient
le mme contenu dans une arborescence d'un projet auraient le mme blob .
C.1.1.2. Tree
Un tree retient un ensemble de pointeurs vers des blobs ou des trees . Il
reprsente souvent un dossier ou un sous-dossier.
C.1.1.3. Commit
Un commit lie l'tat d'un arbre la faon dont on est arriv cet tat. Il retient le
nom de diffrents commits prcdemment effectus qui dfinissent cet tat
prcdent. Ce sont les parents du de ce clich .
C.1.1.4. Tag
Un tag contient le nom d'un objet et son type ainsi que d'autres informations. Il
retient surtout un message.
86/104
Annexes - Logiciel de suivi de version : git
C.1.3. Branches
Les instantanes (les commits ) ne sont pas ncessairement aligns les uns la
suite des autres, du plus ancien au plus rcent. Le travail peut tre men de faon
parallle selon des dveloppement parallles (plusieurs dveloppeurs qui travaillent
ensemble sur un mme projet, par exemple). On parle de branches de dveloppement
; celles-ci pouvant diverger ou converger.
Le suivi d'une branche se fait en conservant la tte de cette ligne de projet (qui
correspond au dernier commit de la branche). Ce point particulier est repr par le
mot cl HEAD .
C.2. Utilisation
A moins de spcifier un nom pour le dossier que l'on veut se crer dans son
environnement de travail, il porte le nom du dossier d'origine. Si l'on se dplace dans
ce dossier, on observe une copie des fichiers. Cette arborescence constitue le dossier
de travail.
git pull
87/104
Rapport de projet de fin d'tude
git init
Il faut ensuite ajouter les fichiers que l'on souhaite suivre l'index. Pour cela, on
spcifie les noms des fichiers avec la commande add . Dans le cas d'un premier
ajout, on peut vouloir ajouter tout les fichiers de faon rcursive. On tape alors la
commande :
git add .
Avant de faire le premier commit , on peut avoir un rsum des fichiers qui ont t
ajouts ou modifis depuis le dernier commit en faisant :
git status
git commit
Pour effectivement voir les branches qui existent dans le projet, on fait :
git branch
On remarquera que la branche sur laquelle on se situe actuellement est celle qui est
prcde d'une astrisque. Si l'on veut se positionner sur la nouvelle branche de
dveloppement :
Une fois que l'on est sur cette branche, on peut faire les modifications voulues sans
impacter sur les autres branches. On peut crer des fichiers puis demander les
ajouter au suivi de la branche. Bien sr, pour que les modifications soient prises en
compte, il faudra faire un commit .
Si l'on veut commencer une nouvelle branche qui sera bas partir d'un autre
instantan que le moment prsent, il faut l'indiquer lors de la cration de la nouvelle
branche. On peut donner le hach du commit sur lequel on veut se baser :
88/104
Annexes - Logiciel de suivi de version : git
Si l'on veut faire converger la branche sur laquelle on se trouve avec une autre
branche de dveloppement, on utilisera la commande :
Lorsque les changements ne crent pas de conflits, il n'y a rien de plus faire. Sinon,
il faut diter les fichiers avant de faire le commit . On peut au pralables voir les
diffrences au sein des fichiers en faisant :
git diff
git log
On peut visualiser une version graphique ( l'aide de caractres ASCII 18) de la liste en
ajoutant l'option --graph .
Cette commande liste les commits dans l'ordre du plus rcent au plus ancien.
Lorsque l'on se base sur une branche qui continu d'tre dvelopp mais o l'on veut
travailler un instant donn plus ancien, elle permet de vrifier que l'on a bien
dplac le pointeur de tte au bon endroit.
Le logiciel git conserve une trace seulement des documents qu'il rpertorie. Par
exemple, si l'on mne une compilation dans un dossier qui est suivi par git, les objets
de compilation (qui portent l'extension .o ) ne sont pas suivis. Il y a la possibilit
de supprimer les fichiers qui ne sont pas suivis en utilisant le commande :
L'option -d permet de s'assurer que les changements effectus sur l'autre branche
ont t appliqus sur la branche actuelle. Pour forcer le comportement et ne pas tenir
compte des changements appliqus sur la branche parallle, on remplace le -d par
-D .
89/104
Rapport de projet de fin d'tude
Lorsque l'on se rend compte que l'on a fait une erreur et que l'on veut revenir l'tat
du commit prcdent, il faut utiliser la commande suivante :
Ceci permet de remettre la fois le dossier de travail et l'index dans l'tat prcdent.
90/104
Annexes - Logiciel de suivi de version : svn
D.1. Concepts
91/104
Rapport de projet de fin d'tude
Bien que le point prsent dans la partie prcdente ne soit pas une ncessit pour
faire fonctionner le programme Subversion, il est recommand d'utiliser ce type de
squelette.
De plus, Subversion ne retient pas fondamentalement le concept de branches . Il
effectue des copies de dossier dossier. Au cours de ces copies, il prend le soin de ne
copier que les documents ncessaires et de conserver un historique des changements
effectus. Ce mcanisme est masqu l'utilisateur qui, lui, voit une copie complte
des arbres. C'est l'utilisateur qui ajoute ces branches le concept de branche de
dveloppement .
D.2. Utilisation
Il faut faire attention la faon dont on rentre l'URL. En particulier lorsque l'on entre
des noms comportant des espaces. Dans ce dernier cas, il faut penser indiquer l'URL
entre guillemets.
svn update
Il n'y a pas besoin de redonner l'URL du dpt car le logiciel Subversion retient la
location du dpt au moment du clonage .
92/104
Annexes - Logiciel de suivi de version : svn
Une fois le dpt cr, on peut commencer le peupler. Pour cela, on peu copier un
dossier contenant le travail qui a dj t commenc. Le fait de copier les donnes
pour la premire fois amne Subversion faire un premier commit . Un
commit est le fait de proposer des modifications ; cela fait aussi avancer la
rvision du projet. On peut joindre le texte dcrivant brivement le commit dans
la commande avec l'option -m .
On notera que dans cette commande, l'URL spcifie un fichier (avec le prfixe
file: ) contenu sur la machine, en local. Dans toute URL, le premier champ aprs la
double barre oblique indique la machine qui contient le fichier. Dans le cas d'un fichier
en local, on peut omettre de donner le nom de la machine, mais il faut alors continuer
indiquer le chemin d'accs au fichier (qui lui-mme commence avec une barre
oblique), d'o la prsence, au final, de trois barres la suite. C'est aussi ce moment
l qu'il est conseill de crer un squelette de type TTB ( Trunk, Tags, Branches ).
On peut avoir un rsum des fichiers qui ont t ajouts, supprims ou modifis
depuis le dernier commit en faisant :
svn status
svn commit
Une fois que l'on a cr cette branche, on peut faire l'opration de clonage (avec
checkout ) sur sa machine. On pourra travailler et mettre jour son travail sans
impacter la branche principale.
93/104
Rapport de projet de fin d'tude
Toute les jonctions de versions se font avec la commande merge . En utilisant cette
commande, on fait converger les donnes de la version indiqu par l'URL dans la
version de travail dans laquelle on se trouve. Si l'on prend un exemple o l'on a
connaissance de changements sur la branche principale et que l'on veut mettre jour
sa branche de dveloppement, on fait :
Avant de faire cette commande, il faut s'assurer que l'on a bien enregistr les
changements effectus sur ses documents (par un commit ). Sinon, on prend le
risque de rcrire par dessus ces documents.
Pour faire la jonction de la branche de dveloppement avec la branche principale, il
faut faire quelques oprations supplmentaires :
On prend soin de faire une mise jour du travail termin sur sa branche sur le
serveur ( commit depuis sa branche de dveloppement).
On se dplace sur une copie locale de la branche principale et on la met jour
(utilisation de la commande update ).
On demande faire la jonction entre notre copie locale de la branche principale
et notre branche de dveloppement :
Lorsque les changements ne crent pas de conflits, il reste peu de choses faire.
Sinon, il faut diter les fichiers avant de faire le dernier commit . On peut au
pralables voir les diffrences au sein des fichiers en faisant :
svn diff
Cette commande prsente les diffrences sous le format diff , ce qui permet
ventuellement de copier sa sortie dans un fichier de patch.
Puis l'on met jour la branche principale sur le serveur (en faisant un
commit ).
svn info
94/104
Annexes - Logiciel de suivi de version : svn
On obtient alors des informations utiles telles que : l'URL de la racine du dpt, l'URL
du dossier de travail, la rvision...
Lorsque l'on a supprim des fichiers et que l'on se rend compte que l'on souhaitai les
conserver, on peut faire appel au suivi de version. Pour restaurer un fichier, on peut
faire :
95/104
Rapport de projet de fin d'tude
E.1. Installation
Dans le cadre de mon projet, en utilisant une distribution Ubuntu sur le PC hte, le
serveur est rcuprable directement depuis les dpts. Il suffit donc d'utiliser le
gestionnaire de paquets :
On rcupre le serveur (tftpd), le client (tftp) TFTP et l'on installe le super serveur
Internet (xinetd) s'il n'est pas dj install.
E.2. Configuration
On commence par crer un dossier dans lequel les informations mises la disposition
des machines distantes seront dposes. Le dossier correspondant est cr la base
de l'arborescence systme, dans le dossier /srv/. Ce dernier dossier est celui, dans le
cas des systmes de type Linux, abrite les donnes des serveurs qui fonctionnent sur
la machine.
96/104
Annexes - Mise en place d'un serveur TFTP
service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = /srv/tftpboot
disable = no
}
97/104
Rapport de projet de fin d'tude
F.1. Installation
Dans le cadre de mon projet, en utilisant une distribution Ubuntu sur le PC hte, le
serveur est rcuprable directement depuis les dpts. Il suffit donc d'utiliser le
gestionnaire de paquets :
F.2. Configuration
J'ai dcid de crer un dossier dans lequel les informations mises la disposition de la
carte seront dposes. Le dossier correspondant est cr la base de l'arborescence
systme, dans le dossier /srv/. Pour rappel, ce dernier dossier est celui qui, dans le
cas des systmes de type Linux, abrite les donnes des serveurs fonctionnant sur la
machine.
Les fichiers partager, les personnes autorises et les permissions sont dfinies dans
un fichier spcifique : /etc/exports. Les fichiers et les permissions sont de la forme :
98/104
Annexes - Dboguage symbolique : gdb
Il va donc chercher les librairies du systme hte, qui ne correspondent pas celles
qui sont utiliss par l'application sur la machine cible. Comme gnralement, il existe
une copie du systme de fichier de la machine cible sur la machine hte, on peut
ajouter un prfixe pour la recherche des librairies dynamiques :
De l'autre ct, sur la machine hte, on dmarre le dbogueur gdb avec la version de
notre programme contenant les symboles de dboguage :
berruer@montevideo:~/xenomai/tmp$ arm-none-linux-gnueabi-gdb \
>example_task
[...]
(gdb) target remote 192.168.0.118:2345
Remote debugging using 192.168.0.118:2345
99/104
Rapport de projet de fin d'tude
(gdb) i sharedlibrary
From To Syms Read Shared Object Library
0x400007c0 0x40017690 Yes /srv/nfsboot/lib/ld-linux.so.3
0x40068660 0x4014a7b0 Yes /srv/nfsboot/lib/libc.so.6
[...]
En plus de cette fonctionnalit, il est parfois utile de savoir et de vrifier que le lien
avec les librairies dynamiques s'est bien pass. Pour cela, on peut demander au
dbogueur de s'arrter au moment de la cration du lien :
(gdb) i threads
2 Thread 396 0x40048f5c in rt_task_sleep () from
/srv/nfsboot/usr/xenomai/lib/libnative.so.1
* 1 Thread 395 main (argc=1, argv=0xbe9f4e34) at example_task.c:37
(gdb) thread x
100/104
Annexes - Dboguage symbolique : gdb
(gdb) frame x
101/104
Rapport de projet de fin d'tude
Bibliographie
Sites Internet
www.pc104.org Consortium du standard PC/104.
www.xenomai.org Site du projet Xenomai avec un accs au code source,
la documentation technique
www.kernel.org Archives du noyau Linux
www.arm.linux.org.uk Projet de portage du noyau Linux sur l'architecture
ARM
www.arm.com Site du consortium ARM
www.intel.com Site du constructeur Intel
www.linuxfromscratch.org Guide de dveloppement d'un systme GNU/Linux
complet
www.slackware.com Site de la distribution Linux Slackware
lttng.org Environnement de traage du noyau
www.pathname.com/fhs Document du Filesystem Hierarchy Standard
www.linuxfoundation.org Fondation Linux (hbergeant le comit LSB)
Livres
The C Programming Language, 2nd Edition
Brian W. Kernighan, Dennis M. Ritchie.
Prentice Hall PTR, 1988 - 274 p.
102/104
Linux Device Drivers, 3rd Edition
Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman.
O'Reilly Media Inc, 2005 636 p.
Articles
Documentation/CodingStyle and Beyond
Greg Kroah-Hartman, 8 p.
www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_paper/codingstyle.ps
103/104
Rapport de projet de fin d'tude
Kristin Allen,
PC/104 and smallformfactors (PC1042115), Resource Guide 2007
2007 2 p.
www.smallformfactors.com/pdfs/KristinAllenMktg.RG07.pdf
104/104