Rapport de stage Master Professionnel 2005 Concepteur en Architectures de Machines et Systèmes Informatiques
Copyright © 2005, 2006 Cédric VINCENT
Tout le texte (paragraphes, exemples de code, tableaux, ...) disponible dans ce rapport est sous licence Creative Commons by-nc-sa 2.5. Cela ne s'applique pas aux photos, captures d'écran, aux schémas et aux citations.
Résumé
Ce document décrit le travail que j'ai effectué durant mon stage dans l'entreprise « Systèmes Midi-Pyrénées ». SMP est une PME spécialisée dans la conception de stations au sol pour la communication par satellite. Ce stage a été effectué dans le cadre du Master Professionnel « Concepteur en Architectures de Machines et Systèmes Informatiques » (CAMSI) 2005.
L'objectif de ce stage était d'intégrer un système Linux dans un « Field-Programmable Gate-Array ». Un FPGA est une puce électronique composée de cellules logiques que l'on peut interconnecter à volonté pour créer un circuit intégré personnalisé. J'ai développé sur un FPGA Xilinx Virtex-II Pro, ce dernier contenant un PowerPC 405. J'ai donc utilisé ce processeur intégré en tant que processeur principal du système Linux. Linux est un noyau, c'est-à-dire un logiciel qui crée une abstraction entre le matériel et les programmes. Par exemple, lorsqu'un programme écrit dans un fichier, c'est le noyau qui pilote le disque dur pour y écrire les octets.
Les systèmes logiciels conçus pour ce genre de FPGA ne sont pas comme ceux fonctionnant sur les « System-on Chip ». Premièrement, les périphériques peuvent être mappés à différentes adresses (selon la configuration du FPGA), donc les logiciels bas-niveau (comme le noyau Linux) doivent être écrits de manière à contourner ce problème. De plus, les systèmes embarqués n'ont que peu de mémoire, par conséquent les développeurs doivent prendre soin de ne pas gaspiller les ressources. Ces notions peuvent sembler obscures à un développeur "traditionnel", c'est pourquoi j'ai rédigé comment développer pas à pas un système Linux pour Virtex-II Pro. Au final, j'ai conçu un système qui est plus performant (en coût, et en ressources) que les solutions déjà existantes. Par exemple, le noyau Linux que je fournis est plus générique que celui des autres fournisseurs. De même, la distribution Linux conçue dans le cadre de ce stage démarre plus rapidement et utilise moins de mémoire que toutes celles conçues pour le Virtex-II Pro.
Ce stage constitue un premier pas dans le monde industriel. Il représente également un très grand atout pour mon projet professionnel. Les responsables de l'entreprise SMP souhaitent à présent me confier une nouvelle mission à partir de Septembre : harmoniser l'IHM (logiciel) et TNS (matériel), afin d'intégrer ces deux compétences dans la même puce FPGA.
Table des matières
- Remerciements
- I. Présentation
- II. Travaux et Résultats
- 3. Installation des outils de développement GNU
- 4. Portage du chargeur U-Boot
- 5. Portage du noyau Linux
- 5.1. Introduction
- 5.2. Evaluation des travaux disponibles
- 5.3. Mise en place
- 5.4. Amorce du noyau Linux
- 5.5. Configuration du processeur
- 5.6. Initialisation du noyau Linux
- 5.7. Pilote du contrôleur d'interruptions
- 5.8. Pilote du contrôleur série
- 5.9. Pilote de l'interface réseau XEmac
- 5.10. Pilote de l'interface CompactFlash
- 5.11. Pilote de l'interface Flash
- 5.12. Contraintes sur l'architecture
- 5.13. Débogage
- 5.14. Conclusion et résultats
- 6. Création d'une distribution Linux
- III. Conclusions et perspectives
- IV. Annexes
- Bibliographie
- Index
Liste des illustrations
- 1.1. Planning de mon stage (Mars-Mai)
- 1.2. Planning de mon stage (Juin-Août)
- 2.1. Photo de la carte de développement Virtex-II Pro
- 2.2. Schéma de la carte de développement Virtex-II Pro
- 2.3. Illustration de l'architecture CoreConnect dans les FPGA Xilinx
- 2.4. Choix de la méthode pour construire ce système
- 2.5. Choix de la carte FPGA utilisée
- 2.6. Choix du processeur utilisé
- 2.7. Choix des fréquences, de l'interface de débogage
- 2.8. Choix des périphériques externes
- 2.9. Choix des périphériques externes (mémoires)
- 2.10. Choix des périphériques externes (Ethernet)
- 2.11. Choix des périphériques internes
- 2.12. Choix des applications de tests
- 2.13. Récapitulatif de ce système
- 2.14. Choix des pilotes
- 2.15. Choix des plages d'adresses
- 2.16. Exportation vers ISE
- 2.17. Schéma simplifié de la logique de multiplexage
- 3.1. Solution au problème de dépendance
- 5.1. Graphe des appels des fonctions étudiées
- 5.2. Connections du contrôleur d'interruptions
- A.1. Gestion du temps de décompression et de chargement
- B.1. Appel de fonction externe
Liste des tableaux
- 2.1. Multiplexage des signaux ChipSelect
- 5.1. Évaluation des travaux disponibles
- 5.2. Modifications faites sur le noyau
- 5.3. Références des fonctions étudiées
- 5.4. Adressage dans les différents modes d'accès à la mémoire
- 5.5. Évaluation des travaux
- 5.6. Modifications faites sur le noyau
- 6.1. Evaluation des différentes bibliothèques C
- 6.2. Evaluation des différentes collections d'outils
- 6.3. Evaluation des différentes distributions
- 7.1. Amélioration obtenues sur le noyau
- 7.2. Améliorations obtenues sur la distribution
- A.1. Evaluation de CoreUtils
- A.2. Evaluation de BusyBox
- A.3. Evaluation d'EmbUtils
- A.4. Evaluation de Système K
- A.5. Evaluation de Heirloom
- A.6. Evaluation de la GlibC
- A.7. Evaluation de µClibC
- A.8. Evaluation de DiteLibC
- A.9. Evaluation de KlibC