Activité n°2 : Prise en main du kit Atmel SAM9G10

Le port série DEBUG

Relier un adaptateur USB/RS232 sur le port série SERIAL DEBUG PORT.

  1. Qu’est ce que l’USB ?

    USB (Universal Serial Bus) est une norme relative à un bus informatique en transmission série qui sert à connecter des périphériques informatiques à un ordinateur. Le bus USB permet de connecter des périphériques à chaud (quand l’ordinateur est en marche) et en bénéficiant du Plug and Play (le système reconnaît automatiquement le périphérique). Il peut alimenter les périphériques peu gourmands en énergie.

    Lors de la connexion du périphérique à l’hôte, ce dernier détecte l’ajout du nouvel élément grâce au changement de la tension entre les fils D+ et D-. À ce moment, l’ordinateur envoie un signal d’initialisation au périphérique puis à lui fournir une adresse définitive et à obtenir sa description : c’est la procédure d’énumération.

    En effet, après avoir reçu son adresse, le périphérique transmet à l’hôte une liste de caractéristiques qui permettent à ce dernier de l’identifier (type, constructeur, nom, version). L’hôte, disposant de toutes les caractéristiques nécessaires est alors en mesure de charger le pilote approprié.

    Les périphériques sont regroupés en types ou classes dans la terminologie USB. Tous les dispositifs d’une classe donnée reconnaissent le même protocole normalisé. Il existe par exemple une classe pour les périphériques de stockage de masse (mass storage class), implémentée par la quasi-totalité des clés USB, disques durs externes, appareils photo et par certains baladeurs. La plupart des systèmes d’exploitation possèdent des pilotes génériques, pour chaque type de périphérique. Ces pilotes génériques donnent accès aux fonctions de base, mais des fonctions avancées peuvent manquer.

Vérifier la détection du périphérique USB sous GNU/Linux.

$ dmesg 
...
[266739.148911] usb 3-9.4.4: new full-speed USB device number 44 using xhci_hcd
[266739.165780] usb 3-9.4.4: New USB device found, idVendor=067b, idProduct=2303
[266739.165790] usb 3-9.4.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[266739.165795] usb 3-9.4.4: Product: USB-Serial Controller
[266739.165800] usb 3-9.4.4: Manufacturer: Prolific Technology Inc.
[266739.166547] pl2303 3-9.4.4:1.0: pl2303 converter detected
[266739.167646] usb 3-9.4.4: pl2303 converter now attached to ttyUSB0

$ lsusb
...
Bus 003 Device 044: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
  1. Qu’est ce que le vendorId et productId ?

    Les périphériques sont généralement identifiés par une paire de nombres hexadécimaux, comme ceci : 067b:2303.

    L’adaptateur utilisé ici est construit autour d’un PL2303.pdf qui est un pont USB/Série.

Le noyau Linux a détecté le périphérique USB et le “voit” comme un port série virtuel.

  1. Qu’est ce qu’un port série virtuel ?

    Un port série virtuel est une solution logicielle qui émule un port série standard.

    Cela permet généralement :

    Pour établir une communication effective via un port série physique (RS-232) ou virtuel, il est nécessaire de définir le protocole utilisé : notamment, le débit de la transmission (en bits/s), le codage utilisé, le découpage en trame, etc. La norme RS-232 laisse ces points libres, mais en pratique on utilise souvent des trames d’un caractère ainsi constituées :

On obtient donc un port série virtuel accessible par le fichier de périphérique /dev/ttyUSB0 pour la console de débugage (SERIAL DEBUG PORT).

  1. Qu’est-ce qu’un fichier spécial de périphérique ?

    UNIX/Linux gère l’ensemble de ses ressources sous forme de fichier ce qui permet d’avoir une interface commune (par des appels systèmes) pour y accéder (notamment pour les opérations de base : ouvrir, lire, écrire et fermer).

    Les fichiers de périphérique sont des fichiers spéciaux situés dans le répertoire /dev. Ces fichiers forment un “lien” vers le pilote de périphérique (driver) qui a la charge de gérer ce matériel dans le noyau (kernel).

    Si on liste le contenu de /dev :

    $ sudo ls -l /dev | more

    On s’aperçoit que certains périphériques sont de type c (character) dans ce cas ils communiquent octet par octet (par exemple le port série). Alors que d’autres sont de types b (blocks) ils communiquent par blocs de données (par exemple le disque dur).

    Par ailleurs le noyau identifie chaque périphérique au moyen de deux numéros : le majeur (ici 8) et le mineur (ici de 0, 1, 2, …)

    $ ls -l /dev/sd*
    brw-rw---- 1 root disk 8,  0 sept. 16 07:35 /dev/sda
    brw-rw---- 1 root disk 8,  1 sept. 16 07:35 /dev/sda1
    brw-rw---- 1 root disk 8,  2 sept. 16 07:35 /dev/sda2
    brw-rw---- 1 root disk 8,  3 sept. 16 07:35 /dev/sda3
    brw-rw---- 1 root disk 8,  4 sept. 16 07:35 /dev/sda4
    brw-rw---- 1 root disk 8,  5 sept. 16 07:35 /dev/sda5
    brw-rw---- 1 root disk 8,  6 sept. 16 07:35 /dev/sda6
    brw-rw---- 1 root disk 8, 16 sept. 16 07:35 /dev/sdb

    Les partitions sda1 à sda4 ont le même majeur. Le majeur correspond au premier disque dur SCSI ou SATA. Le noyau identifie ensuite chaque partition grâce au numéro mineur.

    Les majeurs et les mineurs sont définit dans la documentation accompagnant le noyau Linux dans le fichier /usr/src/linux/Documentation/devices.txt.

    La commande mknod sert à créer de nouveaux périphériques :

    $ sudo mknod /dev/bidon b 42 0

    Cf. devices.txt

  2. À quoi servent les droits d’accès d’un fichier spécial de périphérique ?

    À controler qui a accès au périphérique et avec quels droits (de lecture et d’écriture).

    Par défaut, le système applique la politique des droits d’accès rw-rw—- pour ce type de périphérique USB :

    $ ls -l /dev/ttyUSB0
    crw-rw---- 1 root dialout 188, 0 déc.  19 07:40 /dev/ttyUSB0

    Ici, le périphérique sera accessible en lecture/écriture 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 avez les possibilités suivantes :

    Pour une gestion automatique, il faudrait passer par udev qui est maintenant le service qui prend en charge le répertoire /dev.

On peut maintenant utiliser un logiciel d’émulation de terminal sur le port série virtuel, au choix :

  1. Qu’est-ce qu’un logiciel d’émulation de terminal ?

    Un émulateur de terminal, aussi appelé console virtuelle ou terminal virtuel, est un logiciel qui émule le fonctionnement d’un terminal informatique (clavier/écran).

On lance picocom :

$ picocom -b 115200 /dev/ttyUSB0

Remarque : on sort de picocom en utilisant la combinaison de touches Ctrl-A puis Ctrl-X.

Alimenter le kit et observer le démarrage sur la console DEBUG :

RomBOOT
Start AT91Bootstrap...

-- AT91 Launcher Project --
-- AT91SAM9g10-EK2
-- Compiled: Oct 13 2009 15:40:33 --
|--------|------------|--------|--------|--------|
|  Wear  |   Count    |  Free  |  Live  | Dirty  |
|--------|------------|--------|--------|--------|
|     0  |       234  |     0  |   234  |     0  |
|     1  |       182  |     0  |   181  |     1  |
|     2  |       146  |     0  |   122  |    24  |
|     3  |       462  |    34  |    17  |   411  |
|--------|------------|--------|--------|--------|
-I- Logical mapping in block #939
-I- Mapping loaded from block #939
CALIBRATIONPOINTSX0=3584
CALIBRATIONPOINTSY0=3519
CALIBRATIONPOINTSX1=493
CALIBRATIONPOINTSY1=3538
CALIBRATIONPOINTSX2=513
CALIBRATIONPOINTSY2=547
CALIBRATIONPOINTSX3=3614
CALIBRATIONPOINTSY3=578
XSLOPE=-8255
YSLOPE=-13931
XINDEX=0
YINDEX=1
Start_NandDisk=110100480
End_NandDisk=134217728

USB device msd start
Total 1 medias defined
MSD started
GS_CMD :> === OS UI
  1. Qu’est-ce que RomBOOT ?

    C’est le programme de démarrage (boot) qui est stocké en ROM. Il vérifie si une application valide est présente puis la transfère dans la mémoire interne SRAM et l’exécute.

  2. Qu’est-ce que AT91Bootstrap ?

    C’est le chargeur de démarrage de premier niveau. Il a en charge la configuration matérielle. Il démarre ensuite un chargeur d’amorçage (bootloader).

Démarrer Linux et observer son démarrage sur la console DEBUG :

Total 39 blocks loaded from NAND flash!
Image size: 1540572, load_addr: 20008000, ep: 20008000
Disable interrupt...
Process Cache ...
End clean environment...
relocating linux kernel to proper address, dst: 20008000, src: 22000040, len: 1540572
... 1540572 bytes data transferred!

Starting linux kernel ..., machid: 2159, tags: 20000100

Uncompressing Linux............................................. done, booting the kernel.
Linux version 2.6.27 (hxu@bendor) (gcc version 4.2.0 20070413 (prerelease) (CodeSourcery Sourcery G++ Lite 2007q1-10)) #1 Thu Oct 29 08:50:39 CET 2009
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
Machine: Atmel AT91SAM9G10-EK2
...
Starting GPE display manager: gpe-dm

.-------.                                           
|       |                  .-.                      
|   |   |-----.-----.-----.| |   .----..-----.-----.
|       |     | __  |  ---'| '--.|  .-'|     |     |
|   |   |  |  |     |---  ||  --'|  |  |  '  | | | |
'---'---'--'--'--.  |-----''----''--'  '-----'-'-'-'
                -'  |
                '---'

The Angstrom Distribution at91sam9g10ek2 ttyS0

Angstrom 2009.X-stable at91sam9g10ek2 ttyS0

at91sam9g10ek2 login:

Vous pouvez vous connecter sous le compte root :

  1. Quelles sont les caractéristiques principales du système (noyau, processeur, mémoire, stockage) ?

    at91sam9g10ek2 login: root
    
    // L'OS
    # uname -a
    Linux at91sam9g10ek2 2.6.27 #1 Thu Oct 29 08:50:39 CET 2009 armv5tejl unknown
    
    // Le CPU
    # cat /proc/cpuinfo
    Processor   : ARM926EJ-S rev 5 (v5l)
    BogoMIPS    : 132.71
    Features    : swp half thumb fastmult edsp java 
    ...
    Hardware    : Atmel AT91SAM9G10-EK2
    
    // La mémoire
    # cat /proc/meminfo | grep Mem
    MemTotal:        61856 kB
    MemFree:         14376 kB
    
    // Le système de fichiers
    # df -h | grep root
    /dev/root        60.0M     31.9M     28.1M  53% /

Recommencer pour observer le démarrage de WinCE sur la console DEBUG :

Reading Block: 816
...CE Kernel for ARM (Thumb Enabled) Built on Sep 30 2007 at 22:37:06
Windows CE Firmware Init
BSP 1.0.1 for the AT91SAM9G10EK board (built Oct 20 2009)
Adaptation performed by ADENEO (c) 2005
...

Le port USB périphérique

Ce port permettra de reprogrammer les mémoires du kit SAM9G10. Les cavaliers de la carte doivent être positionnés de cette façon :

Relier un câble USB A/B sur le connecteur USB DEVICE.

  1. Qu’est ce qu’un câble USB A/B ?

    Le bus USB ne permet pas de relier entre eux deux périphériques ou deux hôtes : le seul schéma de connexion autorisé est un périphérique sur un hôte. Pour éviter des branchements incorrects, la norme spécifie deux types de connecteurs : le type A, destiné à être situé sur l’hôte, et le type B, destiné à être situé sur le périphérique. Une mise à jour de la norme USB 2 introduit une version miniature du connecteur B : le mini-B. Elle est fonctionnellement équivalente au connecteur B, mais de dimensions nettement réduites.

Redémarrer.

Remarque : vous ne pouvez plus lancer WinCE/Linux. Sur l’écran, vous devez visualiser une icône USB en bas à gauche.

  1. Observer les messages systèmes sur votre poste et lister les périphériques USB.

    $ dmesg
    ...
    [271928.066775] usb 3-9.4.3: new full-speed USB device number 47 using xhci_hcd
    [271928.092255] usb 3-9.4.3: New USB device found, idVendor=03eb, idProduct=6129
    [271928.092265] usb 3-9.4.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    [271928.092270] usb 3-9.4.3: Product: ATMEL AT91 MSD
    [271928.092274] usb 3-9.4.3: Manufacturer: ATMEL
    [271928.092278] usb 3-9.4.3: SerialNumber: 0123456789AB
    [271928.093228] scsi14 : usb-storage 3-9.4.3:1.0
    [271929.088069] scsi 14:0:0:0: Direct-Access     ATMEL    Mass Storage MSD 0.01 PQ: 0 ANSI: 6
    [271929.088457] sd 14:0:0:0: Attached scsi generic sg13 type 0
    [271929.089005] sd 14:0:0:0: [sdl] 253696 512-byte logical blocks: (129 MB/123 MiB)
    [271929.094763] sd 14:0:0:0: [sdl] Write Protect is off
    [271929.094773] sd 14:0:0:0: [sdl] Mode Sense: 03 00 00 00
    [271929.100654] sd 14:0:0:0: [sdl] No Caching mode page found
    [271929.100664] sd 14:0:0:0: [sdl] Assuming drive cache: write through
    [271929.120295] sd 14:0:0:0: [sdl] No Caching mode page found
    [271929.120304] sd 14:0:0:0: [sdl] Assuming drive cache: write through
    [271929.129694]  sdl:
    [271929.142927] sd 14:0:0:0: [sdl] No Caching mode page found
    [271929.142936] sd 14:0:0:0: [sdl] Assuming drive cache: write through
    [271929.142943] sd 14:0:0:0: [sdl] Attached SCSI removable disk
    
    $ lsusb
    Bus 003 Device 047: ID 03eb:6129 Atmel Corp. 
    ...

Le système Linux a détecté un périphérique USB : Mass Storage MSD.

  1. Qu’est ce que Mass Storage MSD ?

    MSD (Mass Storage Device) est un dispositif de stockage de masse. Le stockage de masse est un support permettant de stocker une quantité d’informations à long terme.

    Les périphériques USB étant regroupés en classes, il existe une classe pour les périphériques de stockage de masse (mass storage class) désigant un ensemble de protocoles rendant accessible un périphérique USB (device) à un dispositif informatique hôte (host).

    Le périphérique USB est “vu” comme un disque dur externe et cela permet le transfert de fichiers entre l’hôte et le périphérique.

Le système Linux a rendu accessible automatiquement le disque dur interne du kit dans un point de montage du répertoire /media.

  1. Qu’est qu’un point de montage ?

    Un point de montage est un répertoire à partir duquel sont accessibles les données se trouvant sous forme d’un système de fichiers sur une partition de disque dur ou un périphérique de stockage. La notion de point de montage apparaît surtout dans les systèmes Unix/Linux. Deux opérations sont impératives : le montage (pour pouvoir l’utiliser) et le démontage (pour libérer la ressource). La commande Unix/Linux permettant de monter des répertoires est mount. La commande inverse, qui démonte, est umount (et non unmount).

    $ mount | grep sdl
    /dev/sdl on /media/XXXX-XXXX type vfat (rw,nosuid,nodev,uid=1026,gid=65536,shortname=mixed,dmask=0077,utf8=1,showexec,flush)

Le disque flash du kit a été monté avec le système de fichiers vfat.

  1. Qu’est-ce qu’un système de fichiers ? Qu’est-ce que vfat ?

    Un système de fichiers (File System) est une façon de stocker les informations et de les organiser dans des fichiers sur des mémoires de masse comme un disque dur. Une telle gestion des fichiers permet de traiter, de conserver des quantités importantes de données ainsi que de les partager entre plusieurs programmes informatiques. Il offre à l’utilisateur une vue abstraite sur ses données et permet de les localiser à partir d’un chemin d’accès.

    Un système de fichiers s’installe sur une partition (cf. fdisk). On crée un système de fichiers par une opération de formatage.

    Windows propose les systèmes FAT (File Allocation Table) et NTFS (New Technology File System). Le monde des Unix (Unix, Linux, BSD, Mac OS X) supporte un très grand nombre de systèmes de fichiers. On peut citer ext2 qui est le système de fichiers historique de GNU/Linux et qui a été créé à l’origine par Rémy Card, un français.

    Ici, le disque flash a été monté en vfat (Virtual FAT) qui est une extension des systèmes de fichiers de type FAT de Microsoft (FAT12, FAT16 ou FAT32) qui permet l’utilisation de noms de fichiers longs.

  2. Lister le contenu du disque flash du kit.

    $ ls -l /media/XXXX-XXXX/
    total 13
    -rw-r--r-- 1 tv tv   88 juil.  5  2010 autorun.inf
    -rw-r--r-- 1 tv tv 3262 mai   20  2008 cover.ico
    drwx------ 2 tv tv 1024 juil. 15  2010 delivery
    drwx------ 2 tv tv 2048 oct.  19  2010 Demo
    drwx------ 4 tv tv 2048 juil. 15  2010 html
    -rw-r--r-- 1 tv tv 3063 juil. 16  2010 welcome.html
  3. Qu’est-ce qu’un fichier autorun.inf ? Quel est son encodage ? Que contient ce fichier ?

    Le fichier autorun.inf est un fichier texte (encodé en ASCII) enregistré à la racine d’un périphérique de stockage (CD, Clé USB, etc.) permettant de configurer un AutoRun pour les systèmes d’exploitation Microsoft Windows.

    $ file /media/XXXX-XXXX/autorun.inf 
    /media/XXXX-XXXX/autorun.inf: Microsoft Windows Autorun file, ASCII text, with CRLF line terminators
    
    $ cat /media/XXXX-XXXX/autorun.inf 
    [autorun]
    ShellExecute=.\welcome.html
    icon=.\cover.ico
  4. Lister le contenu du répertoire Demo. Quels sont ces fichiers ?

    $ ls -lh /media/XXXX-XXXX/Demo/
    total 66M
    -rw-r--r-- 1 tv tv  31M oct.  29  2009 Angstrom-x11-sam9g10ek2-image-glibc-ipk-2009.X-stable-at91sam9g10ek2.rootfs.jffs2
    -rw-r--r-- 1 tv tv 102K oct.  29  2009 AT91Launcher-at91sam9g10-ek2-sdram.bin
    -rw-r--r-- 1 tv tv  31K oct.  29  2009 at91sam9g10ek2_defconfig
    -rwxr-xr-x 1 tv tv 1,6K juil.  6  2010 demo-at91sam9g10ek2.bat
    -rw-r--r-- 1 tv tv 2,1K août  13  2010 demo-at91sam9g10ek2.tcl
    -rw-r--r-- 1 tv tv 1,5M oct.  29  2009 linux-2.6.27-at91-exp.2-at91sam9g10ek2.bin
    -rw-r--r-- 1 tv tv 4,6K juil.  7  2009 nandflash_at91sam9g10ek2.bin
    -rw-r--r-- 1 tv tv 1,5M oct.  29  2009 Sam9g10-ek2-Sam9Launcher480272.bin
    -rw-r--r-- 1 tv tv  32M oct.  29  2009 WinCE-6.0-at91sam9g10ek2.nb0

    Ce sont l’ensemble des fichiers de démonstration du kit (les chargeurs de démarrage, les systèmes d’exploitation WinCE et Linux).

  5. Qu’est-ce que jffs2 (extension donnée à un des fichiers) ?

    JFFS2 (Journaling Flash File System version 2) est un système de fichiers journalisé utilisé sur les systèmes à mémoire flash. Il succède à JFFS, et ne sera finalement pas remplacé par JFFS3 mais par UBIFS. JFFS2 a été inclus dans le noyau Linux depuis la version 2.4.10.

    C’est donc le système de fichiers utilisé pour le système de fichiers racine (rootfs) de Linux.

Avant de reprogrammer le kit, il faut s’assurer de sauvegarder le contenu du disque interne.

  1. Sauvegarder le contenu du disque interne au kit.

    $ cp -r /media/XXXX-XXXX/ $HOME

Débrancher le câble USB A/B.

  1. Que se passe-t-il ?

    L’icône USB disparaît de l’écran et les deux systèmes (WinCe et Linux) sont à nouveau prêts à être lancés.

    Le périphérique USB a été déconnecté et le point de montage démonté automatiquement.

Retour au sommaire