Après avoir programmé la version Linux, il faut remettre la version démo originale.
Pour réaliser cela, on va reprogrammer le kit.
On a besoin :
Atmel fournit :
On relie l’adaptateur USB/RS232 sur le port série SERIAL DEBUG PORT et on lance picocom :
$ picocom -b 115200 /dev/ttyUSB0
Remarque : on sort de picocom en utilisant la combinaison de touches Ctrl-A puis Ctrl-X.
Pour accéder à l’interface de programmation, il faut désactiver le démarrage (boot) à partir de la NAND Flash. Pour cela, il faut retirer le cavalier en J24 :
On alimente le kit SAM9G10 ou on fait un RESET. On observe sur la console SERIAL DEBUG PORT :
RomBOOT
>
Ensuite, on peut relier un câble USB A/B sur le connecteur USB DEVICE.
On vérifie la détection du périphérique de programmation :
$ dmesg
...
[29346.976166] usb 1-1.2.7: new full-speed USB device number 21 using ehci-pci
[29347.068794] usb 1-1.2.7: New USB device found, idVendor=03eb, idProduct=6124
[29347.068799] usb 1-1.2.7: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[29347.069192] cdc_acm 1-1.2.7:1.0: This device cannot do calls on its own. It is not a modem.
[29347.069213] cdc_acm 1-1.2.7:1.0: ttyACM0: USB ACM device
$ lsusb
...
Bus 001 Device 021: ID 03eb:6124 Atmel Corp. at91sam SAMBA bootloader
$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 oct. 7 16:34 /dev/ttyACM0
Attention : le périphérique /dev/ttyACM0 ne sera accessible en lecture/écriture que par l’utilisateur propriétaire root
et les membres du groupe dialout
. Tous les autres (other) utilisateurs auront aucun accès. Pour modifier cette situation, vous pouvez soit changer les droits manuellement ($ sudo chmod 666 /dev/ttyACM0
) soit ajouter l’utilisateur (ici toto) dans le groupe dialout
($ sudo adduser toto dialout
).
Suite à l’installation de la version Linux, la carte mémoire de la NAND Flash est comme ceci :
La carte mémoire de la NAND Flash pour la version de démonstration originale doit être la suivante :
Pré-requis :
La procédure est la suivante :
$ cd $HOME/XXXX-XXXX/Demo/
$ ls -l
-rw------- 1 tv tv 31M oct. 29 2009 Angstrom-x11-sam9g10ek2-image-glibc-ipk-2009.X-stable-at91sam9g10ek2.rootfs.jffs2
-rw------- 1 tv tv 102K oct. 29 2009 AT91Launcher-at91sam9g10-ek2-sdram.bin
-rw------- 1 tv tv 31K oct. 29 2009 at91sam9g10ek2_defconfig
-rw------- 1 tv tv 1,6K juil. 6 2010 demo-at91sam9g10ek2.bat
-rw------- 1 tv tv 2,1K août 13 2010 demo-at91sam9g10ek2.tcl
-rw------- 1 tv tv 1,5M oct. 29 2009 linux-2.6.27-at91-exp.2-at91sam9g10ek2.bin
-rw------- 1 tv tv 4,6K juil. 7 2009 nandflash_at91sam9g10ek2.bin
-rw------- 1 tv tv 1,5M oct. 29 2009 Sam9g10-ek2-Sam9Launcher480272.bin
-rw------- 1 tv tv 32M oct. 29 2009 WinCE-6.0-at91sam9g10ek2.nb0
On est prêt pour “flasher” le système Linux demandé :
retirer le cavalier en J24
Alimenter la carte (on obtient RomBOOT sur la console DEBUG)
remettre le cavalier en J24
$ sam-ba_64 /dev/ttyACM0 AT91SAM9G10-EK demo-at91sam9g10ek2.tcl
On est presque revenu à la situation de départ.
On a bien détecté le périphérique USB Mass Storage MSD mais, après les reprogrammations, le disque interne a été effacé (sdl: unknown partition table) :
$ dmesg
...
[86605.097271] usb 3-9.4.3: new full-speed USB device number 37 using xhci_hcd
[86605.122383] usb 3-9.4.3: New USB device found, idVendor=03eb, idProduct=6129
[86605.122392] usb 3-9.4.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[86605.122397] usb 3-9.4.3: Product: ATMEL AT91 MSD
[86605.122402] usb 3-9.4.3: Manufacturer: ATMEL
[86605.122405] usb 3-9.4.3: SerialNumber: 0123456789AB
[86605.123320] scsi12 : usb-storage 3-9.4.3:1.0
[86606.818926] scsi 12:0:0:0: Direct-Access ATMEL Mass Storage MSD 0.01 PQ: 0 ANSI: 6
[86606.819331] sd 12:0:0:0: Attached scsi generic sg13 type 0
[86606.820238] sd 12:0:0:0: [sdl] 253440 512-byte logical blocks: (129 MB/123 MiB)
[86606.825857] sd 12:0:0:0: [sdl] Write Protect is off
[86606.825859] sd 12:0:0:0: [sdl] Mode Sense: 03 00 00 00
[86606.831585] sd 12:0:0:0: [sdl] No Caching mode page found
[86606.831592] sd 12:0:0:0: [sdl] Assuming drive cache: write through
[86606.850046] sd 12:0:0:0: [sdl] No Caching mode page found
[86606.850048] sd 12:0:0:0: [sdl] Assuming drive cache: write through
[86606.867956] sdl: unknown partition table
[86606.879999] sd 12:0:0:0: [sdl] No Caching mode page found
[86606.880000] sd 12:0:0:0: [sdl] Assuming drive cache: write through
[86606.880001] sd 12:0:0:0: [sdl] Attached SCSI removable disk
$ lsusb
...
Bus 003 Device 037: ID 03eb:6129 Atmel Corp.
Qu’est-ce qu’une partition ?
Une partition est une partie d’une mémoire de masse (disque dur par exemple) destinée à accueillir un système de fichiers.
Qu’est-ce qu’une table de partitions ?
Les informations sur les partitions sont conservées sur le disque lui-même dans des zones qu’on appelle tables de partitions. La table de partitions principale est contenue dans le premier secteur du disque ou secteur d’amorçage (généralement MBR ou GPT) qui contient également le programme d’amorçage. Chaque ligne d’une table de partitions contient l’adresse de début de la partition et sa taille. Il peut s’agir de partitions primaires qui contiendront un système de fichiers ou de partitions étendues qui contiendront à leur tour une table de partitions ayant la même structure que la table principale.
Qu’est-ce que le MBR ?
Le MBR (Master Boot Record) est le nom donné au premier secteur adressable d’un disque dur (cylindre 0, tête 0 et secteur 1, ou secteur 0 en adressage logique) dans le cadre d’un partitionnement Intel. Sa taille est de 512 octets. Le MBR contient la table des partitions (les quatre partitions primaires) du disque dur. Il contient également une routine d’amorçage dont le but est de charger le système d’exploitation, ou le chargeur d’amorçage (boot loader) s’il existe, présent sur la partition active.
Il faut maintenant réinstaller les fichiers fournis par Atmel sur le disque interne flash.
Si vous devez effacer la table de partitions, il faudra faire :
$ sudo dd if=/dev/zero of=/dev/sdl bs=512 count=1
Qu’est-ce que dd ?
dd est une commande unix permettant de copier un fichier en ne sélectionnant qu’une partie de données à copier. Il est particulièrement adapté à la copie sur des périphériques blocs tel que des disques durs ou des lecteurs CD-ROM. Il faut toujours faire attention lorsqu’on utilise dd.
Quelle est la commande dd qui permet de sauvegarder le MBR ?
$ sudo dd if=/dev/sdl of=full-mbr.bin bs=512 count=1
Sinon, maintenant, on va créer et formater une partition FAT :
$ sudo sudo sfdisk /dev/sdl <<EOF
1,+,0xE,*
EOF
$ sudo sfdisk -l /dev/sdl
Disque /dev/sdl : 1021 cylindres, 4 têtes, 62 secteurs/piste
Unités= cylindres de 126976 octets, blocs de 1024 octets, décompte à partir de 0
Périph Amor Début Fin nº cyl. nº blocs Id. Système
/dev/sdl1 * 1 1020 1020 126480 e W95 FAT16 (LBA)
/dev/sdl2 0 - 0 0 0 Vide
/dev/sdl3 0 - 0 0 0 Vide
/dev/sdl4 0 - 0 0 0 Vide
$ sudo mkfs.vfat -F 32 /dev/sdl1
Que fait la commande fdisk ?
fdisk est un utilitaire utilisé sous DOS, Linux, Mac OS X et certains UNIX (comme FreeBSD) pour manipuler les partitions et la table de démarrage. Bien que le nom de cet outil soit identique sur ces quatre systèmes, il ne s’agit pas du même programme.
Qu’est-ce que sfdisk ?
sfdisk est un utilitaire disponible sous Linux pour manipuler les partitions. C’est l’un des seuls utilitaires à pouvoir être utilisé en mode non interactif.
Qu’est-ce que mkfs ?
mkfs est une commande Unix/Linux qui permet de formater une partition avec un système de fichiers donné. Plusieurs types de systèmes de fichiers sont supportés, notamment ext2, ext3, dos, FAT, les types supportés dépendant du système et de la version du programme.
Débrancher puis rebrancher le câble USB A/B.
Le disque interne va être remonté automatiquement dans /media :
$ df | grep media
/dev/sdl1 vfat 122M 512 122M 1% /media/YYYY-YYYY
Ensuite, on recopie les fichiers d’origine :
$ cp -r $HOME/XXXX-XXXX/* /media/YYYY-YYYY/
Que permet l’option -r de la commande cp ?
De copier récursivement les répertoires
Que permet l’option -a de la commande cp ?
-a, –archive identique à -dR –preserve=all
Elle préserve tous les attributs des fichiers et répertoires copiés (les droits d’accès, les propriétaires, les horodatages, …)
Vérifier que le kit est fonctionnel comme à l’origine.
Jusqu’ici, on a utiliser des images de systèmes pré-fabriqués. Il est évidemment possible de créer son propre système.
Dans le domaine des systèmes embarqués, on se retrouve souvent en situation où on doit reconstruire un système complet à partir des sources pour une architecture cible souvent différente de son architecture hôte. Pour cela, on utilise des outils de génération de distribution automatisée (build system).
Citer quelques build system de Linux embarqué ?
Buildroot est un système de construction de Linux embarqué. Son but est de simplifier et d’automatiser le processus de construction d’un système Linux embarqué.
OpenEmbedded, Yocto, Poky
OpenWRT (Outil spécialisé pour le matériel dédié au réseau notamment des routeurs)
LTIB, PTXdist