Quand on développe sur une machine des programmes devant séxécuter
sur une autre machine, on dit que l'on fait du développement
croisé. Les outils de développement que l'on utilise
s'appelle outils de d'eveloppement croisés, les outils
habituels, ceux qui générent des programmes séxécutant
sur la même
machine s'appellent outils de développement natifs.
La machine sur laquelle on fait le développement s'appelle machine
hôte (une station de travail HP). La machine sur laquelle
séxécutent les programmes
s'appelle machine cible (un kit 68040).
- édition du programme source.
- assemblage/compilation et édition de liens
.
- exécution du programme sur la machine.
En développement croisé c'est un peu plus compliqué:
Sur la machine hôte (la station HP):
- édition du programme.
- assemblage/compilation croisé
- édition de liens (on génére
du code pour la machine cible et non pour la machine hôte !).
- transformation du code généré
en un format convenable pour la machine cible.
Sur la machine cible (kit):
- recuperer le code exécutable de la machine
hôte.
- lancer l'exécution de ce code.
La machine hôte et la machine cible doivent être reliés
d'une manière ou d'une autre pour permettre le transferer du code
exécutable :
On peut donc contrôler un kit 68040 ou lui envoyer un programme depuis une station de travail par 2 types de connexions:
- une connexion série à faible débit sous le moniteur 162bug de Motorola.
- une connexion réseau à haut débit sous le moniteur XRAY debugeur de Microtec.
A la base l'unique programme fournit par le contructeur de la carte
MVME162LX
est le moniteur 162bug. Le moniteur 162bug joue vis
à vis d'un
Kit 68040 le même rôle que
joue un shell vis à vis d'une machine UNIX. Le 162bug
attend,
interpréte et retoune le résultat des
commandes de l'utilisateur via sa première ligne serie. Ces
commandes
permettent de contrôller totalement la carte: vous pouvez par exemple
visualiser/modifier le contenu des registres du processeur ou de la
memoire, mais surtout vous pouvez récuperer du code exécutable
provenant
d'une station hôte et le debuger.
Dans le but de g'erer des applications temps reels sous VRTX nous avons
ajoute' en UVPROM le moniteur XRAY de Microtec.
Il fait la
meme chose que le 162bug mais utilise le reseau pour communiquer
avec une station hôte. Sur la station vous diposez d'outils
puissants
pour la mise au point de vos programmes (en assembleur ou en langage
C) comme: le shell xsh qui vous met en communication direct
avec
le kit ou le debugeur graphique xmo68ks.
Vous avez aussi la possibilite de demarrer le kit comme une machine
diskless:
le kit va chercher sur un serveur reseau un programme qu'il execute
ensuite. On utilise se fonctionnement pour booter le kit sur le systeme
d'exploitation Linux.
Pour choisir ces differents mode de fonctionnement nous avons ajoute un ronboot de demarrage. Ce programme se trouve en UVPROM et s'execute des la mise sous-tension du kit; sont comportement depend de la position des cavaliers 13-14 et 15-16 en J11 sur la carte MVME162LX:
Pour demarrer sous le 162bug taper 1.
Tapez un Retour Chariot dans la fenêtre pour verifier que
vous obtenez bien le prompt 162bug>.
C'est tout bon le 162bug attend vos commandes ! Si ca ne marche pas
vérifiez la présence du cable série !
Je vous invite à consulter les pages sur l'utilisation du
kit sous XRAY debugger. Mais si vous devez utiliser
le moniteur 162bug, vous devez effectuer les manipulations suivantes:
- mettre hors tension le kit 68040,
- degager de son logement la carte MVME162,
- replacer le cavalier en 13-14 sur J11 (a cote'
du processeur),
- et enfin reloger la carte dans son emplacement.
ou alors demandez mon intervention (inserer photo).
Ce mode de fonctionnement est prevu pour le développement de
driver UNIX et l'étude des réseaux TPC/IP .
Mais si vous devez utiliser le moniteur 162bug, vous devez effectuer
les manipulations suivantes:
- mettre hors tension le kit 68040,
- degager de son logement la carte MVME162,
- replacer les cavaliers en 13-14 et 15-16 sur J11
(a cote' du processeur),
- et enfin reloger la carte dans son emplacement.
ou alors demandez mon intervention (inserer photo).
Seul un fichier (extension en .29) au format
S-record de Motorola peut etre telecharge' dans la memoire d'un kit.
Les Ce type de fichier est
g'en'er' automatiquement pars les commandes de d'eveloppement
crois'es
(cckit, assemblage,...).
La commande de transfere de fichier vers un kit est send + nom de
fichier sans extension:
162bug>
162bug>send test40
Chargement du fichier test40.s29
0
1
2
.....
22
fin de chargement
162bug>
162bug>
Le chargement initialise e'galement certaint des registres du processeur,
en particulier le PC. Donc apres un chargement vous pouvez
lancer l'execution directement par un simple go.
sinon un go
+ l'adresse de debut du code.
- HP (celui que nous utilisons depuis le debut);
- MicroTec (le nouveau, celui que l'on devrait utiliser
mais qui demande un effort: refaire la doc, les scripts, ect...)
- GNU (vachement bien, gratuit, c'est celui
que tout le monde utilise sauf à l'ESIEE car partiellement porte
sur
HPUX 10.2 et pas vraiment maintenu par le SMIG dommage).
Ces outils existent sur votre station de travail sous deux formes: la
forme native et la forme croisé pour la famille des processeurs
Motorola 68000. Les commandes essentiels sont:
- cc68000 : le compilateur
- as68k : l'assembleur
- ld68k : l'éditeur
de liens
- ar68k : gestionnaire
de librairie
Pour simplifier à l'extrême l'utilisation de ces commandes vous diposez des scripts suivants:
- cckit
: pour compiler
- assemblage
: pour assembler
- c68, a68 et l68
Il suffit simplement d'utiliser la commande:
assemblage [68000 | 68010 | 68030 | 68040 ] Fichier (sans extension .s, l'option par defaut est 68000)
Cette commande genere 3 fichiers:
Fichier.lst Il contient le code machine +
le source + la table des symboles + les
eventuelles erreurs.
Fichier.o est le fichier objet.
Fichier.s29 est le fichier a telecharger
dans le kit.
Compiler un ficher source en langage C
Il faut utiliser la commande de compilation:
cckit [68000 | 68010 | 68030 | 68040] Fichier (sans extension .c, l'option par defaut est 68000)
Ne vous trompez pas d'option car elle determine l'adresse
d'implentation de votre programme dans la RAM du kit cible.
Pour un kit 68000 cette adresse est 800h,
un kit 68010 cette adresse est FF9000h et un kit 68040
cette adresse est
0h.
Cette commande genere alors 4 fichiers:
Fichier.lst contient le mnemonique assembleur
( en correspondance avec le source C ) + le code machine + la table des
symboles + les eventuelles erreurs. ).
Fichier.map est le rapport de l'edition des
liens, il contient le mapping d'implentation de votre code dans la memoire
du kit cible.
Fichier.o est le fichier objet.
Fichier.s29 est le fichier a telecharger
dans le kit avec la commande.
Pour implementer les conventions du langage ANSI
C, cckit ajoute au debut de votre programme du code nomme startup,
qui
implemente l'algorithme suivant:
- initialisation de l'environnement
d'execution (est fonction du kit)
- jsr main
- terminaison propre du
programme (appel a exit(): dans notre cas c'est un retour
au moniteur du kit)
Votre code est donc place' juste derriere celui du
startup.
Vous pouvez le constater en regardent le fichier .map.
Pour une application comportant des modules en langages C et assembleur 680X0
Soit une application comportant:
1 module main.c (programme
principal en langage C).
1 module ext.s (sous-programme
en langage assembleur 68000).
TRADUCTIONS SEPAREES :
a) Compilation des sources C avec la commande c68
+ nomfichier :
info18
4: ls
main.c
info18 5: c68 main
info18 6: ls
main.c main.lst main.o
La commande c68 [68000
| 68010 | 68030 | 68040] + liste de fichiers
ne genere que les fichiers .o (pour
une edition des liens separees)
de la liste des fichiers. L'option par defaut est le processeur cible 68000.
main.c source
C du programme.
main.o contient
le code objet translatable de main.c ( existe si main.c est sans erreur).
main.lst contient
la traduction du fichier source C main.c en mnemonique assembleur + le
code machine 680X0.
b) Assemblage des sources assembleur avec la commande a68 + nomfichier
info18 6: ls
ext.s
info18 7: a68 ext
info18 8: ls
ext.s ext.lst
ext.o
La commande a68 [68000
| 68010 | 68030 | 68040] + liste de fichiers.
L'option par defaut est le processeur
cible 68000.
ext.s source
68000, extension en .s obligatoire !
ext.o contient
le code objet translatable de ext.s
ext.lst contient
le code machine 68000 + la table des symboles + les eventuelles erreurs...
c) EDITION DES LIENS
La commande l68 [
kit68000 | kit68010 | kit68040 ] NomFichier permet
l'edition des liens avec tous les fichiers objets (extension .o)
presents dans le repertoire
courant.
L'option permet de preciser
le kit cible pour implenter votre code a des adresses compatibles avec
la RAM du kit cible et de lui ajouter
le bon code de startup.
Cette option fait en faite reference a un fichier de commande qui contient
les ordres pris en compte par l'editeur
de liens. Ces fichiers de
commandes sont Kit68000.k,
Kit68010.k,
Kit68030.k
et Kit68040.k.
Ils indiquent a l'editeur de liens ou placer
les differentes sections
des code de la memoire de la machine cible.
Si vous voulez changer l'adresse
d'implentation de votre programme ou ajouter une autre librairie (par exemple
iofischer10 qui contient
les routines pour piloter
une maquette fischer) vous devrez ecrire vous meme ce fichier de commande.
Vous trouverez dans le repertoire
un exemple dans le repertoire:
/user/info_lib/Kits68k/exemple/LinkCom
(commencer par lire ALIRE).
info18 8: ls
ext.s ext.lst ext.o main.c
main.lst main.o
info18 9: l68 appli
info18 10: ls
ext.s ext.lst ext.o
main.c main.lst main.o
appli.map appli.s29
appli.s29 executable au format S de Montorola a telecharger sur le kit
appli.map rapport de edition des liens et eventuellement les erreurs.
Il faut respecter les champs séparés par des tabulations:
Etiquette Tabulation Mnémonique
Assembleur Tabulation Opérande Tabulation
;
Commentaire
Ou Directive d'assemblage
Un commentaire situé en debut de ligne doit être précédé
d'une etoile *, s'il est situé après l'opérande
il doit être précédé
d'un point-virgule ;. exemple:
BASE | PREFIX | SUFFIX |
binaire | % | B |
octal | @ | O ou Q |
décimal | aucun | D |
hexadécimal | $ | H (un 0 doit etre ajouter
devant un nombre
hexa d'on le premier caractère ne commence pas par un nombre décimal). |
exemples de contantes numériques:
%1001 1001BL'adressage immédiat est indiqué par une dièse #:
@56 56O
678290
$A2CF9 0A2CFH
$4C1D0 4C1D0H
MOVE.B #0C3H,D1L'adressage indirect est symbolisé par des parenthèses ( ):
ADD.L (A5),D4 ; Le contenu pointé par A5 est ajouté au
; registre D4