Differences between revisions 1 and 15 (spanning 14 versions)
Revision 1 as of 2006-12-22 17:13:56
Size: 1991
Editor: liche
Comment:
Revision 15 as of 2007-01-12 01:50:31
Size: 7880
Editor: pptp3-104
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
Utilisation minimaliste et cahotique de la maquette. #acl GroupeSen/MembPermGroup:read,write,delete,revert,admin All:read
Line 3: Line 3:
Connecter la maquette par liaison serie avec le programme "minicom"
La configuration doit être:
[[TableOfContents(3)]]

= Utilisation normale d'une maquette =

== Communication avec la carte ==

Il y a deux moyens de communiquer avec une maquette : par le réseau ou par port série (RS232).

=== Port série ===
C'est le port utilisé :
 * par le bootloader, lors du boot de la carte
 * par Linux, qui y sort par défaut la console et un shell root

Côté PC, on utilisera un terminal sachant piloter les ports série :
 * sous Linux : {{{minicom}}} ou {{{cu}}}
 * sous Windows : {{{Teraterm Pro}}}

Par défaut le port série de la maquette est configuré en 115200 baud, 8 bits, pas de parité, 1 bit de stop, pas de contrôle de flux (autrement dit {{{115200 8N1 No}}} ).

Avec minicom, on pourra utiliser les réglages suivants :
Line 14: Line 32:
Connecter la maquette sur éthernet. === Port Ethernet ===
Line 16: Line 34:
Configurer le réseau sur la maquette :
{{{
# ifconfig eth0 137.194.66.1 netmask 255.255.252.0
}}}
/!\ Une seule addresse est disponible donc pour le moment une seule maquette peut utiliser cette configuration...
Le fonctionnement de l'Ethernet est différent selon qu'on est sous Linux ou dans le bootloader.

==== Dans le bootloader ====
Par défaut, le bootloader prend l'adresse IP {{{192.168.0.30}}}. Il est possible d'en choisir une autre au boot, par la commande {{{ipcfg}}}. Pour sauver cette adresse de façon permanente, on utilisera la commande {{{senv}}}.

==== Sous Linux ====
Lors du boot de Linux, l'adresse IP du bootloader est ignorée. Le noyau Linux demande une nouvelle adresse IP au serveur DHCP. Si le serveur met trop de temps à répondre, il en prend une par défaut, la même que celle que le serveur DHCP aurait normalement dû lui attribuer.

L'adresse IP obtenue par la carte (soit par DHCP, soit de façon autonome) est de type {{{137.194.66.xxx}}}. Le {{{xxx}}} dépend de l'adresse MAC de la carte et correspond au numéro de la carte (cf. autocollant sur le connecteur MMC).

Les cartes ne disposant pas d'EEPROM pour stocker leur adresse MAC, c'est le bootloader qui donne l'adresse MAC au noyau Linux (sur la ligne de commande du noyau) par le paramètre {{{mac}}}.
Line 23: Line 47:
== Transfert d'une application sur la carte ==
Line 24: Line 49:
Télécharger une version "fonctionnelle" de gdbserver sur la maquette.
{{{
# cd /usr
# mkdir mybin
# cd mybin
# tftp 137.194.64.58
tftp> get arm/gdbserver
tftp> exit
# chmod +x gdbserver
}}}
On peut transférer une application par le port série au moyen de la commande {{{lrz}}} :
 * taper {{{lrz}}} sur la carte,
 * puis utiliser les menus de minicom pour envoyer le fichier par protocole ZMODEM.
Line 35: Line 53:
Compilation d'un source en C sur le PC Si on dispose du réseau, il vaut mieux passer par lui, c'est beaucoup plus rapide ! Pour cela :
 * on peut monter son compte SAMBA par la commande {{{smbmount //serveur/partage /mnt -ousername=BLABLABLA}}}. Par exemple, pour utiliser le SAMBA de COMELEC : {{{smbmount //yggdrasil/polti /mnt -ousername=polti}}}.
 * on peut utiliser {{{wget}}} pour récupérer un fichier disponible sur une page web : {{{wget http://perso.enst.fr/~polti/mon_fichier.tgz}}}
 * on peut utiliser le client ftp de la carte : {{{ftp ftp.enst.fr}}}
 * on peut utiliser le serveur ftp de la carte : {{{ftp arm7-12}}}
 * enfin on peut aussi utiliser {{{nc}}}.

Lors d'un transfert d'une application par {{{ftp}}}, {{{wget}}} ou {{{nc}}}, penser à la rendre exécutable : {{{chmod a+x fichier}}}

== Compilation et débug ==

===== Compilation d'un source en C sur le PC =====
Line 39: Line 68:
Cela crée l'executable "hello" pour la maquette et la version "hello.gdb" pour le debug Cela crée l'executable {{{hello}}} pour la maquette et la version {{{hello.gdb}}} pour le debug
Line 41: Line 70:
Transfert de l'executable depuis le PC sur le serveur tftp de vega ===== Transfert sur la maquette =====
Par le moyen de votre choix (cf. ci-dessus)...

===== Lancement de {{{gdbserver}}} sur la maquette =====
Line 43: Line 75:
PC$ tftp vega.enst.fr
tftp> put up/hello
tftp> exit
# gdbserver pc:9999 hello
Line 48: Line 78:
Récupération de l'executable par la maquette
===== Lancement du debuggueur sur le PC =====
Si la carte a pour nom {{{arm7-15}}}
Line 50: Line 82:
# tftp 137.194.64.58
tftp> get up/hello
tftp> exit
# chmod +x hello
PC$ arm_elf_gdb hello.gdb
> target remote arm7-15:9999
Line 56: Line 86:
Lancement de gdbserver sur la maquette (il faut récupérer l'adresse ip du PC) Si on n'a pas son nom, mais son adresse IP :
Line 58: Line 88:
# /usr/mybin/gdbserver <mon-adresse-ip-de-mon-pc>:9999 hello PC$ arm_elf_gdb hello.gdb
> target remote 137.194.66.12:9999
Line 61: Line 92:
Lancement du debugger sur le PC
{{{
PC$ arm_elf_insight
Et c'est parti.

Atention :
 * {{{gdbserver}}} sort à chaque fois que le programme débuggé est fini
 * il ne faut pas oubliez de mettre des breakpoint par défaut au début de {{{main}}} et à {{{exit}}}
 * en cas de crash d'une application, il est fort probable que la mémoire a été corrompue. Il vaut mieux rebooter la carte.


= Utilisation avancée =

== Le système de fichiers est corrompu, la carte ne boote plus ! ==

On a effacé un fichier critique, la carte ne boote plus. Mais on ne veut pas la reflasher car il y a des fichiers dessus qu'on ne veut pas perdre...
Le système de fichier normale est stocké en flash NAND. Il reste un système de fichier de sauvegarde en flash NOR.

Boot sur le système de fichier de sauvegarde : à l'invite du BIOS, modifier la ligne de commande du noyau Linux
{{{> setbp
root=/dev/rom0 console=ttyS0,115200 devfs=mount
> mrun
}}}
Le noyau démarre, on obtient un shell. A partir de là, on peut monter le système de fichier corrompu :
{{{# mount -t yaffs /dev/mtdblock0 /mnt
}}}
et remettre en place tous les fichiers nécessaires...

== Reflashage d'une carte ==

Il faut disposer de deux fichiers : une image du noyau Linux, et une image du système de fichiers.
 * Image du noyau 2.4.24-ENST : attachment:image.rom
 * Image du système de fichiers 1.0-ENST : attachment:romfs.tar.bz2

==== Décompression du système de fichiers ====
Sur le PC :
{{{PC$ bunzip2 romfs.tar.bz2
Line 66: Line 128:
Ensuite configurer arm_elf_insight pour
 * se connecter en remote IP sur 137.194.66.1, port 9999
 * charger l'éxécutable hello.gdb (image ELF avec les symboles de debuggage)
Et c'est parti. Atentiongdbserver sort à chaque fois que le programme débuggé est fini, il ne faut
pas oubliez de mettre des breakpoint par défaut au début de main et à exit.
Il faut toujours conserver les deux fenêtres pour pouvoir relancer gdbserver
==== Boot et configuration de la carte ====
Maintenir appuyé le bouton 2 tout en rebootant. On passe en mode bootloader. Choisir une adresse IP (au besoin en demander une à Frédéric ou Alexis) et configurer le bootloader pour utilser cette adresse IP :
{{{> ipcfg
137.194.66.32
}}}

==== Flashage du noyau ====
Sur la carte, taper
{{{> netload
}}}
Sur le PC :
{{{PC$ tftp 137.194.66.32 -m binary -c put image.rom
}}}

Une fois que le fichier est transmis, le flasher en flash NOR (attention de ne pas se tromper d'adresse !!!)
{{{> prog 10000
}}}

==== Démarrage de la carte avec le nouveau noyau ====
Changer la ligne de commande du noyau (si la carte est neuve, elle devrait être correcte)
{{{
> setbp
root=/dev/rom0 console=ttyS0,155200 devfs=mount
}}}

Démarrer la carte avec le nouveau noyau et le système de fichier de sauvegarde :
{{{> mrun
}}}

==== Flashage du nouveau file system ====
Au prompt Linux, configurer l'adresse IP, puis effacer la flash NAND et la monter :
{{{# ifconfig -i eth0 137.194.66.32
# eraseall /dev/mtd0
# mount -t yaffs /dev/mtdblock0 /mnt
}}}

Transférer dessus le nouveau système de fichier :
{{{PC$ ftp 137.194.66.32
cd /mnt
put romfs.tar
}}}

Décompresser le nouveau filesystem dans {{{/mnt}}} :
{{{# cd /mnt
# tar xvf romfs.tar
}}}

Configurer les fichiers de configuration par défaut :
{{{# vi /mnt/etc/rc
// changer le nom de la carte à la ligne "hostname", puis sauver et fermer vi
# vi /mnt/share/udhcpc/sample.leasefailed
// changer l'adresse IP par défaut en 137.194.66.xxx avec xxx=numéro de la carte
// puis sauver et quitter vi
}}}

==== Modification des paramètres du noyau ====
Rebooter, et passer en mode bootloader. Il faut maintenant choisir une adresse MAC. On procède comme suit :
 * on prend le numéro de la carte
 * on le lit, comme s'il était écrit en hexadécimal
 * on le ré-écrit en décimal

Par exemple, pour la carte 10, son adresse MAC sera 16. Pour la carte 19, son adresse MAC sera 25. Pour la carte 2, son adresse MAC sera 2.

Une fois l'adresse MAC choisie, modifier la ligne de commande du noyau, en remplaçant {{{xxx}}} ci-dessous par l'adresse MAC choisie.
{{{> setbp
root=/dev/mtdblock0 console=ttyS0,115200 devfs=mount mac=xxx
> senv
}}}

C'est fini, on peut éteindre et rallumer la carte. Elle devrait booter correctement sur le nouveau noyau et le nouveau file system.

TableOfContents(3)

Utilisation normale d'une maquette

Communication avec la carte

Il y a deux moyens de communiquer avec une maquette : par le réseau ou par port série (RS232).

Port série

C'est le port utilisé :

  • par le bootloader, lors du boot de la carte
  • par Linux, qui y sort par défaut la console et un shell root

Côté PC, on utilisera un terminal sachant piloter les ports série :

  • sous Linux : minicom ou cu

  • sous Windows : Teraterm Pro

Par défaut le port série de la maquette est configuré en 115200 baud, 8 bits, pas de parité, 1 bit de stop, pas de contrôle de flux (autrement dit 115200 8N1 No ).

Avec minicom, on pourra utiliser les réglages suivants : {{{# Machine-generated file - use "minicom -s" to change parameters. pu port /dev/ttyS0 pu baudrate 115200 pu bits 8 pu parity N pu stopbits 1 pu rtscts No }}}

Port Ethernet

Le fonctionnement de l'Ethernet est différent selon qu'on est sous Linux ou dans le bootloader.

Dans le bootloader

Par défaut, le bootloader prend l'adresse IP 192.168.0.30. Il est possible d'en choisir une autre au boot, par la commande ipcfg. Pour sauver cette adresse de façon permanente, on utilisera la commande senv.

Sous Linux

Lors du boot de Linux, l'adresse IP du bootloader est ignorée. Le noyau Linux demande une nouvelle adresse IP au serveur DHCP. Si le serveur met trop de temps à répondre, il en prend une par défaut, la même que celle que le serveur DHCP aurait normalement dû lui attribuer.

L'adresse IP obtenue par la carte (soit par DHCP, soit de façon autonome) est de type 137.194.66.xxx. Le xxx dépend de l'adresse MAC de la carte et correspond au numéro de la carte (cf. autocollant sur le connecteur MMC).

Les cartes ne disposant pas d'EEPROM pour stocker leur adresse MAC, c'est le bootloader qui donne l'adresse MAC au noyau Linux (sur la ligne de commande du noyau) par le paramètre mac.

Transfert d'une application sur la carte

On peut transférer une application par le port série au moyen de la commande lrz :

  • taper lrz sur la carte,

  • puis utiliser les menus de minicom pour envoyer le fichier par protocole ZMODEM.

Si on dispose du réseau, il vaut mieux passer par lui, c'est beaucoup plus rapide ! Pour cela :

  • on peut monter son compte SAMBA par la commande smbmount //serveur/partage /mnt -ousername=BLABLABLA. Par exemple, pour utiliser le SAMBA de COMELEC : smbmount //yggdrasil/polti /mnt -ousername=polti.

  • on peut utiliser wget pour récupérer un fichier disponible sur une page web : wget http://perso.enst.fr/~polti/mon_fichier.tgz

  • on peut utiliser le client ftp de la carte : ftp ftp.enst.fr

  • on peut utiliser le serveur ftp de la carte : ftp arm7-12

  • enfin on peut aussi utiliser nc.

Lors d'un transfert d'une application par ftp, wget ou nc, penser à la rendre exécutable : chmod a+x fichier

Compilation et débug

Compilation d'un source en C sur le PC

PC$ arm-elf-gcc -Wall -g  -Wl,-elf2flt -Os -o hello hello.c -lc

Cela crée l'executable hello pour la maquette et la version hello.gdb pour le debug

Transfert sur la maquette

Par le moyen de votre choix (cf. ci-dessus)...

Lancement de {{{gdbserver}}} sur la maquette

# gdbserver pc:9999 hello

Lancement du debuggueur sur le PC

Si la carte a pour nom arm7-15

PC$ arm_elf_gdb hello.gdb
> target remote arm7-15:9999

Si on n'a pas son nom, mais son adresse IP :

PC$ arm_elf_gdb hello.gdb
> target remote 137.194.66.12:9999

Et c'est parti.

Atention :

  • gdbserver sort à chaque fois que le programme débuggé est fini

  • il ne faut pas oubliez de mettre des breakpoint par défaut au début de main et à exit

  • en cas de crash d'une application, il est fort probable que la mémoire a été corrompue. Il vaut mieux rebooter la carte.

Utilisation avancée

Le système de fichiers est corrompu, la carte ne boote plus !

On a effacé un fichier critique, la carte ne boote plus. Mais on ne veut pas la reflasher car il y a des fichiers dessus qu'on ne veut pas perdre... Le système de fichier normale est stocké en flash NAND. Il reste un système de fichier de sauvegarde en flash NOR.

Boot sur le système de fichier de sauvegarde : à l'invite du BIOS, modifier la ligne de commande du noyau Linux {{{> setbp root=/dev/rom0 console=ttyS0,115200 devfs=mount > mrun }}} Le noyau démarre, on obtient un shell. A partir de là, on peut monter le système de fichier corrompu : {{{# mount -t yaffs /dev/mtdblock0 /mnt }}} et remettre en place tous les fichiers nécessaires...

Reflashage d'une carte

Il faut disposer de deux fichiers : une image du noyau Linux, et une image du système de fichiers.

  • Image du noyau 2.4.24-ENST : attachment:image.rom
  • Image du système de fichiers 1.0-ENST : attachment:romfs.tar.bz2

Décompression du système de fichiers

Sur le PC : {{{PC$ bunzip2 romfs.tar.bz2 }}}

Boot et configuration de la carte

Maintenir appuyé le bouton 2 tout en rebootant. On passe en mode bootloader. Choisir une adresse IP (au besoin en demander une à Frédéric ou Alexis) et configurer le bootloader pour utilser cette adresse IP : {{{> ipcfg 137.194.66.32 }}}

Flashage du noyau

Sur la carte, taper {{{> netload }}} Sur le PC : {{{PC$ tftp 137.194.66.32 -m binary -c put image.rom }}}

Une fois que le fichier est transmis, le flasher en flash NOR (attention de ne pas se tromper d'adresse !!!) {{{> prog 10000 }}}

Démarrage de la carte avec le nouveau noyau

Changer la ligne de commande du noyau (si la carte est neuve, elle devrait être correcte)

> setbp
root=/dev/rom0 console=ttyS0,155200 devfs=mount

Démarrer la carte avec le nouveau noyau et le système de fichier de sauvegarde : {{{> mrun }}}

Flashage du nouveau file system

Au prompt Linux, configurer l'adresse IP, puis effacer la flash NAND et la monter : {{{# ifconfig -i eth0 137.194.66.32 # eraseall /dev/mtd0 # mount -t yaffs /dev/mtdblock0 /mnt }}}

Transférer dessus le nouveau système de fichier : {{{PC$ ftp 137.194.66.32 cd /mnt put romfs.tar }}}

Décompresser le nouveau filesystem dans /mnt : {{{# cd /mnt # tar xvf romfs.tar }}}

Configurer les fichiers de configuration par défaut : {{{# vi /mnt/etc/rc // changer le nom de la carte à la ligne "hostname", puis sauver et fermer vi # vi /mnt/share/udhcpc/sample.leasefailed // changer l'adresse IP par défaut en 137.194.66.xxx avec xxx=numéro de la carte // puis sauver et quitter vi }}}

Modification des paramètres du noyau

Rebooter, et passer en mode bootloader. Il faut maintenant choisir une adresse MAC. On procède comme suit :

  • on prend le numéro de la carte
  • on le lit, comme s'il était écrit en hexadécimal
  • on le ré-écrit en décimal

Par exemple, pour la carte 10, son adresse MAC sera 16. Pour la carte 19, son adresse MAC sera 25. Pour la carte 2, son adresse MAC sera 2.

Une fois l'adresse MAC choisie, modifier la ligne de commande du noyau, en remplaçant xxx ci-dessous par l'adresse MAC choisie. {{{> setbp root=/dev/mtdblock0 console=ttyS0,115200 devfs=mount mac=xxx > senv }}}

C'est fini, on peut éteindre et rallumer la carte. Elle devrait booter correctement sur le nouveau noyau et le nouveau file system.

ComElec: GroupeSen/EnSeignement/CycleOptionnelunifié/Elec240Archi/MaquetteArm (last edited 2007-02-20 12:37:06 by elfe)