Linux Embarqué sur MicroBlaze - the Patrice Kadionik`s HomePage

publicité
Rapport de projet avancé
Option Systèmes Embarqués
Linux Embarqué sur MicroBlaze
Encadreur :
Mr. Patrice Kadionik
Mr. Patrice Nouel
Auteur :
Thomas AUBRY
Philippe PLESSIS
Haythem SOUIHLI
Mathias TEUMENI NOUNE
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
Tables des matières
1. Introduction
2. Ressources utilisées
2.1 Ressources matérielles
2.2 Ressources logicielles
3. Développement matériel : Configuration de
la plate-forme Spartan-3E
3.1 Vue générale du projet
3.2 Architecture MicroBlaze
3.3 Architecture matérielle du projet
3.4 Etapes de la configuration
4. Développement logiciel : Génération de
l’image de Linux pour MicroBlaze
4.1 Présentation de uClinux
4.2 Compilation de uClinux
5. Déroulement du projet
5.1 Travail réalisé
5.2 Difficultés rencontrées
5.3 Résultats
6. Conclusions
3
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
1. Introduction
Un système embarqué est un système électronique, piloté par un logiciel, qui est
complètement intégré au système qu'il contrôle. On peut aussi définir un système
embarqué comme un système électronique soumis à diverses contraintes.
Ces systèmes représentent le premier marché de l'électronique. Ils sont
interconnectés et agissent à travers des réseaux, dans un environnement où la vitesse et
la quantité de données échangées croissent rapidement. Les enjeux dans ce domaine se
situent dans la maîtrise de la complexité, la diminution de coûts de production du
logiciel, la performance et la robustesse des architectures matérielles et logicielles.
Linux a fait des percées plus que significatives dans ce domaine. Dans un contexte où
robustesse, légèreté et interopérabilité sont essentielles, le système libre Linux se révèle
un excellent choix : open source et libre de droits, il peut être adapté et diffusé à grande
échelle pour un coût de licence nul.
Notre projet consiste à embarquer une distribution de Linux sur une plate-forme
de développement Spartan-3E. Dans ce rapport nous présenterons les ressources
matérielles et logicielles utilisées. Ensuite on détaillera les travaux réalisés pour de la
configuration de la carte d’une part et pour la génération de l’image de Linux d’autre
part. La dernière partie sera consacrée pour les résultats, ainsi que le déroulement du
projet…
4
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
2. Ressources utilisées
2.1 Ressources matérielles :
Plate-forme de développement Spartan-3E
Elle dispose, notamment, des composants suivants :
FPGA Spartan-3E
64 Mo mémoire SDRAM
16 Mo mémoire Flash
10/100 Ethernet MAC/PHY
Port Série RS232, Port VGA, Port Sourie/clavier (PS/2)
Quartz 50MHz, Entrée horloge externe
Ecran LCD, LEDs, boutons poussoirs
Le composant programmable FPGA Spartan-3E intègre le processeur 32 bits MicroBlaze de
Xilinx.
5
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
2.2 Ressources logicielles
Pour la configuration de la carte, on a utilisé deux environnements de
développement. Ce sont les logiciels de Xilinx : EDK et ISE.
Dans un premier lieu on a utilisé le logiciel EDK
(acronyme de Embedded Development Kit) pour la
configuration de la carte (conception, mapping,
connexion entre les périphériques, choix des ressources
utilisés de la carte…)
Voici une allure du logicielle :
EDK Platform Studio
Environnement du logiciel EDK
6
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
Dans un deuxième lieu on a utilisé « ISE project
navigator ». Ce logiciel Xilinx rassemble les fichiers
de projets, les compile, synthétise, et implémente
sur le MicroBlaze. Un rapport finale sur
l’exploitation des ressources matérielles (mémoires,
…) sera fourni.
La figure ci-dessous
l’environnement :
montre
l’allure
de
ISE Project Navigator
Environnement du logiciel « ISE Project Navigator »
7
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
La génération d’une image de uClinux portable sur la plate-forme a été faite sur
l’environnement du système d’exploitation Linux. On détaillera ceci dans la partie
« Développement logicielle : Génération de l’image de Linux pour MicroBlaze »
3. Développement matériel : Configuration de
la plate-forme Spartan-3E
3.1 Vue générale du projet
Le projet a la vue d’ensemble ci-dessous. Dans un premier temps, nous avons fait une
émulation matérielle suivie de la génération du fichier « autoconfig.in » sous SDK et dans
l’environnement Windows. Le fichier « autoconfig.in » généré au terme de la conception
matérielle est utilisé dans la conception logicielle pour établir les dépendances entre le
noyau et le processeur et enfin pour être implanté dans la carte FPGA.
CONCEPTION génération
HARDWARE
CONCEPTION
SOFTWARE
autoconfig
Linux
SDK Windows
SYNTHESE
+
GENERATION
BITSTREAM
ISE Windows
Charger la cible
Figure 1 : Overview du projet
8
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
3.2 Architecture MicroBlaze
Les caractéristiques du MicroBlaze sont les suivantes :
•
•
•
•
•
•
•
L’architecture du MicroBlaze est une architecture « Harvard » avec ses bus de
programme et bus de données séparés.
Le « core » du processeur embarqué MicroBlaze est un RISC (Reduced Instruction Set
Computer). Les instructions lues par le processeur sont réduites de telle sorte que la
lecture puisse se faire en un cycle machine.
Ses instructions sont de 32-bits avec 3 opérandes et 2 modes d’adressage.
Il ne possède pas d’unité de gestion de mémoire (MMU : Memory Management Unit).
Il posséde 32 registres de 32-bits à usage général.
Ses bus d’adresse sont également de 32-bit
Il possède un « pipeline » de 5 étages et de profondeur 3. En effet, 3 instructions sont
exécutées en 9 cycles d’horloge.
Figure 2 : Architecture du MicroBlaze
Les parties en couleur grise sont optionnelles et montrent à quel point le MicroBlaze est
configurable. Les caches permettent au processeur de gagner en temps d’exécution en
récupérant des données directement àl’intérieur sans aller les chercher dans la mémoire. Le
« Barrel Shift », le « Multiplier », le « Divider » et le « FPU : Floating Point Unit »
permettent d’accélérer des traitements de données.
9
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
Ce diagramme met aussi en évidence les 5 étages du « pipeline » :
1.
2.
3.
4.
5.
La lecture de l’instruction dans le buffer d’instruction.
Le décode de l’instruction dans le décodeur d’instruction
L’accès mémoire pour la lecture des opérandes
Le calcul ou l’exécution de l’instruction dans l’ALU
L’écriture du résultat dans la mémoire spéciale.
3.3 Architecture matérielle du projet
Pour pouvoir tester le fonctionnement du processeur sur la carte spartan 3E, on a rajouté :
•
Comme bus :
Le bus OPB (On-Chip Peripheral Bus) qui joue le rôle d’interface entre les
périphériques et le processeur MicroBlaze.
Le bus LMB (Local Memory Bus) qui permet un accès rapide à la mémoire
BRAM.
Le bus FSL (Fast Link Support) qui gère la connexion du processeur principal
à des co-processeurs.
•
Comme périphériques :
Une mémoire Flash, une DDR-SDRAM
Un port RS232
Un port Ethernet
Des LEDs 8-bits, un Timer
Des boutons et des interrupteurs.
10
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
La figure ci-dessous présente l’architecture matérielle du projet.
Architecture matérielle du projet
11
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
Celle ci-dessous montre les différentes connexions du processeur aux périphériques.
Connexions du MicroBlaze aux périphériques.
3.4 Etapes de la construction de la configuration
Nous avons débuté la conception matérielle sous une station Windows. L’émulation
matérielle et logicielle s’est déroulée comme suit :
12
Systèmes Embarqués
- Linux embarqué sur MicroBlaze Préparation
du noyau
Installation de
uCLinux BSP
construction de la
configuration
Echec
Test de la
mémoire
Copie du fichier
autoconfig.in sous
unix pour le
convertir en fichier
d’unix
Construction de
l’image d’une
noyau sous unix
Copie de l’image
générée sur une
machine Windows
Chargement de la
cible avec le
kernel
Pour ce qui est de la conception « hardware »,
nous avons d’abord installé le paquet uCLinux BSP nécessaire pour générer le fichier
autoconfig.in, qui définit tous les paramètres du logiciel nécessaires pour la
compilation du noyau uCLinux.
Ensuite, nous avons crée un système de base à partir de BSB (Booard System
Builder). Nous avons appelé ainsi BSB Wizard pour créer un nouveau Design. Les
paramètres suivants ont été sélectionnés:
•
•
Board name : Spartan E
Board revision : C
13
Systèmes Embarqués
- Linux embarqué sur MicroBlaze •
•
Processors : MicroBlaze
Une fois le processeur sélectionné, nous sommes passés à sa configuration.
Nous avons fixé la fréquence de l’horloge de référence à 100Mhz et la fréquence de
l’horloge du bus de processeur à 66.67 Mhz.
Le bus OPB et son cache ont été activés.
De même le port série RS232 et la mémoire DDR-SDRAM ont été activés.
La Flash 2Mx32 a été activée.
Baudrate=115200 et l’utilisation d’un contrôleur d’interruptions a aussi été activé.
Ainsi, le système est prêt à être généré. Il ne reste plus qu’à cliquer sur « Generate ». Les
modules « Debud » et « FSL » sont rajoutés dans l’arborescence des composants du système
de la même façon.
La figure ci-dessous a été générée sous EDK et présente le système après rajout des nouveaux
composants.
Figure 5 : Configuration du système.
Après génération de la partie matérielle du système, il ne reste plus qu’à rajouter le noyau
uCLinux. Pour cela, nous avons procédé ainsi :
Nous avons ouvert la fenêtre « Software Platform Settings ».
Ensuite, dans cette fenêtre on a changé l’OS en uCLinux de version 1.00.d.
Enfin, nous avons rentré comme chemin de répertoire : “/home/wu/school/uClinuxcvs/uClinux-dist/linux-2.4.x/arch/MicroBlaze/platform/uclinux-auto” ;
Le noyau est prêt à être compilé. .
On génère les librairies et les BSP en cliquant sur « generate Libraries and BSP ».
On génère successivement les Netlists et les Bitstream en cliquant successivement sur
« Generate Netlists » et « Generate Bitstream ».
La construction matérielle du système est terminée. Le fichier autoconfig.in généré servira à
construire l’image du kernel dans l’émulation logicielle.
14
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
4. Développement logiciel : Génération de
l’image de Linux pour MicroBlaze
Le but de ce projet est de porter uClinux sur MicroBlaze. Nous avons abordé cette
partie de projet tardivement. Car afin de construire uClinux, il faut générer un fichier
nommé auto-config.in. Ce fichier fait le lien entre le hardware et le software.
Dans ce qui suit on présentera dans un premier lieu les caractéristiques de uClinux.
Dans un deuxième lieu on montrera les étapes à suivre afin de construire uClinux.
4.1 Présentation de uClinux
uClinux est un linux pour les microcontrôleurs. uClinux est supporté par de nombreux
processeurs (68000, Coldfire, MIPS, ARM…) dont le processeur MicroBlaze. Cette
dernière caractéristique explique le choix de celui-ci pour le projet.
La première version de uClinux reposait sur le noyau 2.0 et pour le processeur 68000.
Pour le MicroBlaze, nous pouvons utiliser seulement un noyau 2.4 (cependant la version
2.6 est disponible pour de nombreux processeurs).
Les principales caractéristiques de uClinux sont les suivantes :
légèreté : uClibc est très légère (<400Ko)
Cette librairie faisait partie intégrante du projet uClinux, celle-ci est maintenant
maintenue à part.
XIP
Il n’est pas nécessaire de charger les exécutables en Ram pour les exécuter. Cela
peut se faire depuis la Flash. C’est une caractéristique intéressante bien que le
système puisse être fortement ralenti car les temps d’accès en flash sont bien
nettement supérieurs à ceux de la Ram.
Supporté par de nombreux processeurs
Supporte les processeurs sans MMU (ces processeurs sont souvent moins chers) et
l’utilisateur a accès à l’ensemble de la mémoire physique (ce qui a de bons et
mauvais cotés). Il n’y a pas de protection de la mémoire.
Multitâches
4.2 Compilation de uClinux
Afin de générer une image du noyau uClinux, il faut se procurer uClinux-dist, celuici contient toutes les sources, outils et documentations pour construire uClinux. Pour
construire uClinux, il faut apporter le fichier « auto-config.in » qui lui permettra de
15
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
faire le lien entre le hardware et uClinux. Ce fichier a été généré à l'aide des outils
Xilinx.
Pour construire uClinux, nous avons choisi une plateforme de développement: Linux
(Car l'utilisation de Cygwin sous Windows aurait imposé l'installation de nombreux
packages). Les étapes afin de construire uClinux ont été les suivantes:
(1) Décompression de uClinux-dist
(2) Création d'une nouvelle plaque et de son fichier de configuration auto-config.in
Pour créer une nouvelle plaque, on peut se laisser guider par la documentation
contenue dans le dossier:
uClinux-Dist/Documentation/MicroBlaze/AddingPlatforms.txt de John Williams
Pour ajouter notre plaque, il faut créer un dossier NewPlatform dans uClinuxdist/linux-2.4.x/arch/MicroBlaze/platforms/ et copier l'ensemble des fichiers du
répertoire uClinux-auto à l'exception du fichier auto-config.in de ce répertoire car il faut
y ajouter celui qu'on a généré (car il décrit le hardware de notre plaque). Maintenant le
dossier NewPlatform contient les fichiers suivants:
head_ram.s
head_rom.s
ram.ld.in
rom.ld.in
machine.c
Makefile
Rules.make
auto-config.in
(3) Modification des fichiers Boards.mk et config.in
Dans le fichier Boards.mk, il faut ajouter:
ifdef CONFIG_NEWPLATFORM
PLATFORM := NewPlatform
endif
Et dans le fichier config.in il faut ajouter ou modifier les lignes suivantes:
comment 'Platform'
choice 'Platform'
\
"uclinux-auto
CONFIG_UCLINUX_AUTO
\
ML401
CONFIG_ML401
\
MBVanilla
CONFIG_MBVANILLA
\
Egretv0.1
CONFIG_EGRET01
\
NewPlatform
CONFIG_NEWPLATFORM
\
SUZAKU
CONFIG_SUZAKU"
uclinux-auto
[...]
16
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
if [ "$CONFIG_NEWPLATFORM" = "y" ]; then
define_int HZ 100
source arch/MicroBlaze/platform/NewPlatform/auto-config.in
fi
Cela va permettre de faire apparaître la nouvelle plateforme dans les menus.
(4) Lancement du menu de configuration de uClinux pour générer un fichier de
configuration
Pour lancer ce menu, on lance l'instruction suivante:
> make clean
> make menuconfig ou >make xconfig
On arrive alors sur la fenêtre de configuration suivante:
(5)
(6)
(7)
(8)
(9)
etape
etape
etape
etape
etape
Il faut ensuite rentrer dans le menu « Vendor/Product Selection » dans lequel on peut à la fois
choisir le vendeur (« Xilinx ») et la plateforme (« NewPlatform ») :
17
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
18
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
Il faut ensuite entrer dans le menu «Kernel/Library/Defaults Selection» puis une fois le
réglage fini on quitte le menu de configuration en sauvant le fichier de configuration:
19
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
Après avoir quitté ces fenêtres de configurations, on peut configurer et personnaliser les
applications de uClinux:
20
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
D'après la documentation, il faut relancer le menu de configuration et choisir l'option
« Customize user/vendor setting » dans «Kernel/Library/Defaults Selection».
Une fois ces dernières configurations faites, on peut construire l'image de uClinux à l'aide des
commandes suivantes:
> make dep
> make all
L’image générée pourra être ensuite mise dans la flash de la plaque.
5. Déroulement du projet
5.1 Travail réalisé
Nous avons effectué ce projet en trois étapes. Ces étapes, de difficultés croissantes,
nous ont permis, dans un premier temps, d’appréhender la suite de logiciels Xilinx, puis de
réaliser une architecture compatible avec notre carte de test.
Le tutorial « Creating a Simple µClinux MicroBlaze Design »
Ce tutorial décrit la création, la modification, la compilation et la synthèse d’un projet.
Le design proposé était incompatible avec notre carte d’évaluation. Mais ce tutoriel, nous a
permis de prendre en main les logiciels.
Il nous a, en particulier, montré la nécessité de télécharger et d’installer le Package
BSP. Ce package permet de générer le fichier « autoconfig.in ».
Une fois ce package installé, nous disposions des outils nécessaires pour intégrer
« µClinux » comme système d’exploitation de notre architecture.
Finalement ce tutorial fut une bonne introduction à SDK et ISE. Il nous a permis de
construire un projet de A à Z et nous avons pu générer le fichier « autoconfig.in ».
La démonstration « Pentalogix Spartan 3E-500 Embedded Linux
Demo »
Cette démonstration est une collection complète de fichier permettant de générer un
design basé sur MicroBlaze et supportant « µClinux ». Le seul problème étant que ce design
est conçu pour une carte de révision C qui possède une quantité de mémoire Flash inférieure à
notre carte (notre carte étant de révision D).
Cette démonstration nous a permis de générer un fichier « autoconfig.in », de
compiler et de synthétiser un design. Nous disposions également d’une image de « µClinux »
21
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
fournie avec cette démonstration. Ce design et cette image étant incompatible avec notre
carte, nous n’avons pas essayé de les porter sur la carte.
En revanche nous avons essayé de modifier le design proposé pour le faire coller avec
les spécifications de notre carte. Après plusieurs tentatives de remplacement de l’IP gérant la
mémoire Flash16 par celui gérant la mémoire Flash32, nous avons du changer nos plans et
créer une architecture à partir de 0.
Le design « from scratch »
Ce design est notre architecture finale (il a été décrit dans la partie Hardware de ce
document), elle est basée sur le tutoriel « Creating a Simple µClinux MicroBlaze Design »
qui fournit la liste minimale des éléments à intégrer. Certaines corrections ont été apportées
grâce à la démonstration de Pentalogic.
Ce design a été compilé et synthétisé. Il nous a également permis de générer le fichier
« autoconfig.in ».
En parallèle et une fois le fichier « autoconfig.in » généré, la moitié du groupe à
travailler à générer une image de « µClinux ». Ce travail c’est révélé bien plus compliqué que
ce que nous pensions (cf. la partie précédente).
5.2 Difficultés rencontrées
L’absence de documentation
Nous travaillons sur les dernières mises à jour des programmes de Xilinx. Ces mises à
jour datant de moins d’un mois, nous n’avons pas trouvé de tutoriel ou de documentations
(autre que ceux de Xilinx) dédiés à ces logiciels.
De plus Xilinx proposant un FPGA intégrant des cœurs de Power PC, l’IP du
MicroBlaze est relativement peu utilisé (en comparaison avec l’IP du NIOS II d’Altera). Ce
relatif désintérêt fait que peu de projets sont réalisés avec un MicroBlaze d’où l’absence de
sources d’inspirations autour de cette architecture. Ce qui nous a imposé le design « from
Scratch »
Les problèmes de mémoire Ram sur notre ordinateur
Nous avons également rencontré un problème avec la mémoire Ram de notre
ordinateur. En effet, l’ordinateur avait une fâcheuse tendance à rebooter. Ces reboots
successifs nous ont empêchés de réaliser une compilation avant la quatrième séance. Il faut
toutefois remarquer que ces 12 heures nous ont permises de prendre en main les logiciels
EDK et ISE.
22
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
5.3 Les résultats
Nous avons construit et compilé une architecture basée sur le processeur MicroBlaze
de Xilinx. Le rapport de compilation montre que certaines ressources sont particulièrement
critiques.
•
Tout d’abord la distribution logique :
Nous constatons que nous utilisons pratiquement toutes les ressources disponibles.
•
Enfin nous utilisons pratiquement toute la mémoire Ram disponible (Nous avons,
d’ailleurs longtemps rencontré un problème avec la Ram puisque nous en utilisions
215 %. Ceci était du au fait que SDK ne remettait pas automatiquement à jour les
adresses).
•
Nous pouvons également noté que notre projet utilise un équivalent de 1 400 945
portes logiques.
23
Systèmes Embarqués
- Linux embarqué sur MicroBlaze Finalement le résumé indique toutes les données relatives au projet :
En ce qui concerne la génération de « µClinux » nous avons réussi à générer une
image à l’aide du fichier « autoconfig.in ».
Mais le manque de temps ne nous pas permis d’implémenter notre design et l’image
de « µClinux » sur notre carte.
24
Systèmes Embarqués
- Linux embarqué sur MicroBlaze -
6. Conclusions
A l’heure actuelle, nous disposons d’une architecture basée sur MicroBlaze et d’une
image de « µClinux ». Nous sommes donc prêts à implémenter notre projet sur notre carte
Spartan-3E révision D. Mais le manque de temps (du en partie aux problèmes de Ram) ne
nous a pas permis d’implémenter la solution.
Il est de plus important de remarquer que l’utilisation des ressources (distribution
logique et Ram) est très critique. Il semble que la réduction de ce problème serait une
amélioration importante à apporter à ce projet.
D’un point de vue moins terre à terre, ce projet fut notre première expérience incluant
du matériels complexes (microprocesseur) et un système d’exploitation. Il nous a donc permis
de nous familiariser avec un domaine d’activité qui sera peut être notre futur métier.
Nous avons également constaté que la suite de logiciels de Xilinx est moins intuitive et
moins agréable à utiliser que les logiciels d’Altera.
25
Téléchargement