Le File System

File System Debian

Le plus simple pour commencer est de récupérer une arborescence de File System dans le répertoire Distributions dédié à la carte TS7800 de chez Technologic System. J’en ai essayé 2 , une Lenny et une sarge.

$> cd ~/Download <br>
$> wget ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7800-linux/distributions/debian-sarge-udev-512MB-apr282010.tar.gz <br>

Après, on le recopie sur le média que l’on veut. Ici, je mets le file system sur une clé USB.

$> cd /media/disk <br>
$> tar xzvf ~/Download/debian-sarge-udev-512MB-apr282010.tar.gz <br>
$> sync

Par la suite, lorsque l’on voudra exécuter les programmes développés pour MyBot, il suffira

  • soit branche la clé USB sur le PC de développement et on les recopie directement dans /bin.
  • soit on laisse la clé USB en place, sur la carte TS7800, et on se connecte par ssh et on les recopie aussi dans /bin.

Adaptation du File System pour MyBot

Les services inutiles

Si on regarde dans /etc/rc5.d, qui correspond au répertoire qui contient tous les scripts qui vont démarrer en runlevel 5, on voit qu’il y a des services qui ne vont pas me servir.

$> ls -l
 lrwxrwxrwx 1 root root   16 janv. 22 17:08 S01devfsd -> ../init.d/devfsd
 lrwxrwxrwx 1 root root   18 janv. 22 17:08 S10sysklogd -> ../init.d/sysklogd
 lrwxrwxrwx 1 root root   15 janv. 22 17:08 S11klogd -> ../init.d/klogd
 lrwxrwxrwx 1 root root   23 janv. 22 17:08 S17mysql-ndb-mgm -> ../init.d/mysql-ndb-mgm
 lrwxrwxrwx 1 root root   19 janv. 22 17:08 S18mysql-ndb -> ../init.d/mysql-ndb
 lrwxrwxrwx 1 root root   17 janv. 22 17:08 S18portmap -> ../init.d/portmap
 lrwxrwxrwx 1 root root   15 janv. 22 17:08 S20exim4 -> ../init.d/exim4
 lrwxrwxrwx 1 root root   15 janv. 22 17:08 S20inetd -> ../init.d/inetd
 lrwxrwxrwx 1 root root   17 janv. 22 17:08 S20makedev -> ../init.d/makedev
 lrwxrwxrwx 1 root root   15 janv. 22 17:08 S20mysql -> ../init.d/mysql
 lrwxrwxrwx 1 root root   17 janv. 22 17:08 S20ntpdate -> ../init.d/ntpdate
 lrwxrwxrwx 1 root root   13 janv. 22 17:08 S20ssh -> ../init.d/ssh
 -rwxr-xr-x 1 root root 1974 oct. 19  2007 S20wpasupplicant
 lrwxrwxrwx 1 root root   20 janv. 22 17:08 S21nfs-common -> ../init.d/nfs-common
 lrwxrwxrwx 1 root root   17 janv. 22 17:08 S50wu-ftpd -> ../init.d/wu-ftpd
 lrwxrwxrwx 1 root root   14 janv. 22 17:08 S89cron -> ../init.d/cron
 lrwxrwxrwx 1 root root   17 janv. 22 17:08 S91apache2 -> ../init.d/apache2
 lrwxrwxrwx 1 root root   20 janv. 22 17:08 S91apache-ssl -> ../init.d/apache-ssl
 lrwxrwxrwx 1 root root   19 janv. 22 17:08 S99rmnologin -> ../init.d/rmnologin
 lrwxrwxrwx 1 root root   23 janv. 22 17:08 S99stop-bootlogd -> ../init.d/stop-bootlogd

Pour l’instant, j’enlève :

$> rm S17mysql-ndb-mgm
$> rm S18mysql-ndb
$> rm S20mysql
$> rm S91apache2
$> rm S91apache-ssl

Le réseau

On peut configurer l’@ IP de l’interface ethernet eth0 dans /etc/network/interfaces. On ajoute les lignes suivantes.

iface eth0 inet static
address 192.168.2.2
network 192.168.2.0
netmask 255.255.255.0
broadcast 192.168.2.255
gateway 192.168.2.1

Dans /etc/hostname, on indique le nom de la machine que l’on veut. {Note}: il se retrouvera aussi dans le prompt du shell.

La liaison série

Une fois que le kernel a démarré, le programme init est exécuté. Il s’aide du fichier inittab qui décrit l’ensemble des processus qui doivent être lancés au démarrage du système (ou à l’arrêt)

Dans /etc/inittab, on choisit la configuration de la liaison série que l’on veut.

T0:23:respawn:/sbin/getty -L ttyAM0 115200 vt100

GPS Garmin Oregon 300

Pour pouvoir faire des sorties plus longues sans passer par les grands axes routiers, j’ai acheté en septembre 2009 un GPS. Après avoir fait le tour des différents modèles sur internet, j’ai choisi le Garmin Oregon 300.

Oregon300

Caractéristiques

Dimensions physiques5,8 x 11,4 x 3,5 cm
Format d'affichage (largeur par hauteur)écran 3’’ de diagonale soit 7,6 cm
Définition d'écran (largeur par hauteur)240 x 400 pixels
Type d'affichageécran tactile de 65 000 couleurs avec rétro-éclairage modulable
Ecran tactileOui
Poids193 g piles comprises
Batterie2 piles AA (non fournies) ; NiMH ou Lithium recommandé
Autonomie de la batterie16 heures
Indice de résistance à l'eauIPX7
Récepteur haute sensibilitéOui
Interface PCCompatible avec USB et NMEA 0183
Altimètre barométriqueOui
Boussole électroniqueOui
Transfert d'appareil à appareil (partage sans fil des données des appareils similaires)Oui
Carte de baseOui
Cartes préchargéesnon
Possibilité d'ajouter des cartesOui
Mémoire intégrée512 Mo
Accepte les cartes mémoirecarte microSD™ (non fournie)
Points d'intérêt personnalisés (possibilité d'ajouter des points d'intérêt supplémentaires)Oui
Waypoints1 000
Itinéraires50
Journal de suivisauvegarde de 20 traces actives
Définition automatique d'itinéraires (fonction d'itinéraire virage par virage)Oui (avec les cartes en option pour les routes détaillées)
Mode GeocacheOui (sans papier)
Compatible Custom mapsOui
Calendrier de chasse/pêcheOui
Informations lune/soleilOui
Tableau des maréesOui
Calcul de zoneOui
Visionneuse JPEGOui
Visionneuse JPEGOui

 

Cintré-Saint Méen le Grand-Cintré

Beau parcours, il peut être vu comme une alternative à celui vers Saint Onen La Chapelle.  A Saint Onen, il faut juste continuer vers Saint Méen au lieu de prendre directement vers Boisgervilly. Dans Saint Méen, on traverse la ville pour récupérer au nord la route qui retourne vers Rennes/Montfort Sur Meu etc. On passe devant le château d’eau avec la peinture représentant Théodore Botrel.

Château d'eau Théodore Botrel de Saint Méen
Château d’eau Théodore Botrel de Saint Méen

Après, la route est super roulante jusqu’à Boisgervilly (Je tiens le 30/35 Km/h c’est dire).

  • Cintré
  • La Chapelle Thouarault
  • Montfort sur Meu
  • Iffendic
  • Saint Maugan
  • Mael
  • Saint Onen La Chapelle
  • Saint Méen le Grand
  • Boisgervilly
  • Saint Uniac
  • La Nouaye
  • Breteil
  • La Chapelle Thouarault
  • Cintré

 

Cintre-SaintMeenLeGrand-Cintre

Détails du parcours

 

Nombre de track point 
Distance68 Kms
Altitude mini35 m
Altitude maximum113 m
Dénivelé positif+302m

Relevé de l’altitude

 

Cintre-SaintMeenLeGrand-Cintre-Elevation

Temps de parcours

DateDistanceDuréeMoyenneMétéoNotes
14/02/201068 Kms2h48mn24.3 Km/h2° mais Ensoleillé
05/09/201066 Kms2h34mn25.7 Km/h20° Ensoleillé
10/04/201167.2 Kms2h37mn25.6 Km/h15°
16/08/201170 Kms2h36mn27.1 Km/h21° Ensoleillé
08/01/201268.3 Kms2h30mn27.2 Km/h7° Nuageux
18/02/201274 Kms2h51mn25.9 Km/h10° 1h30 de pluie légère puis nuageux
30/12/201268 Kms2h34mn26.5 Km/h11° Ensoleillé3° Ensoleillé
01/12/201368 Kms2h39mn25.7 Km/h3° Ensoleillé
06/05/201692 Kms3h27mn26.3 Km/h12° Ensoleillé, vent Est
14/05/201767.5 Kms2h17mn29.5 Km/h12°..18°, Quelques nuages, vent Ouest

Le kernel Linux sur une carte TS7800

Kernel 2.6.32.7

Contrairement aux cartes TS7200, les TS7800 sont livrés avec un kernel 2.6.21. Au lieu d’utiliser les cartes comme ca, j’ai décidé aussi qu’il serait mieux de pouvoir utiliser un kernel plus récent. Dans les derniers kernels, on a la chance d’avoir la carte TS7800 qui est prise en charge. On prendra la configuration dans arch/arm/configs/orion5x_defconfig.

On commence par récupérer le kernel dans The Linux Kernel Archives. J’ai récupéré la dernière version stable 2.6.32.7 puis on la décompresse

$> cd ~/Projets/MyBot/Logiciel
$> wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.7.tar.bz2
$> tar xzvf linux-2.6.32.7.tar.bz2
$> cd linux-2.6.32.7

Maintenant, on peut commencer la compilation proprement dit.

Si l’on veut effacer une configuration précédente et repartir d’une configuration intacte.

$> make ARCH=arm CROSS_COMPILE=/opt/x-toolx/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi- distclean

On applique la configuration correspondant à la carte orion5x_defconfig.

$> make ARCH=arm CROSS_COMPILE=/opt/x-toolx/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi- orion5x_defconfig

Ensuite, on peut modifier la configuration

$> make ARCH=arm CROSS_COMPILE=/opt/x-toolx/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi- menuconfig

Comme modifications, on peut :

  • Changer la ligne de commande, dans Boot Options/Default kernel command string
root=/dev/sda1 rw init=/sbin/init lpj=1662976 console=ttyS0,115200 rootdelay=5
  • OProfile system profiling : No

Ensuite, on lance la compilation

$> make ARCH=arm CROSS_COMPILE=/opt/x-toolx/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-

Si on en reste la, lors de l’exécution de ce kernel on obtiendra le message d’erreur suivant :

>> TS-BOOTROM - built Dec  4 2008
>> Copyright (c) 2008, Technologic Systems
>> Booting from SD card...
 .
 .
 .
 .
 Uncompressing Linux........................................................................................................................................... done, booting the kernel.
Error: unrecognized/unsupported machine ID (r1 = 0x0000020e).
Available machine support:
ID (hex)        NAME
 00000674        Technologic Systems TS-78xx SBC
Please check your kernel config and/or bootloader.

 

Ce message indique que la machine n’est pas reconnue. Sur les architectures ARM, le bootloader qui charge puis exécute le kernel lui fournit certaines informations. Les registres R1 et R2 contiennent respectivement l’ID de l’architecture et le pointeur sur les structures atags.

Pour connaitre les identifiants connus, il existe le fichier {arch/arm/tools/mach-types}. La valeur qui nous intéresse est la suivante.

ts78xx                  MACH_TS78XX             TS78XX                  1652

Il faut maintenant initialiser le registre R1 juste avant la première instruction du kernel. Pour ca, j’utilise le programme devio. Donc si ce programme n’est pas disponible sur votre distribution, il faut le récupérer sur http://sourceforge.net/projects/devio/ puis on le compile

$> cd ~/Projets/
$> tar xzvf ~/Download/devio-1.2.tar.gz
$> cd devio-1.2
$> ./configure
$> make

Il ne reste plus qu’a recopie l’exécutable devio dans un répertoire accessible dans le PATH. On utilise alors devio pour générer les quelques octets qui seront mis en début du fichier kernel. Pour rappel, l’ID pour la TS7800 est 1652 0x674

$> cd ~/Projets/MyBot/Logiciel/linux-2.6.32.7
$> cd arch/arm/boot
$> devio > foo 'wl 0xe3a01c06,4' 'wl 0xe3811074,4'
$> cat foo zImage > zImage.fix

On pourra ensuite utiliser le fichier zImage.fix comme image à utiliser.

Puis l’on recopie les modules dans l’arboresence correspondante de notre « File System ».

$> sudo make ARCH=arm CROSS_COMPILE=/opt/x-toolx/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi- INSTALL_MOD_PATH=/media/disk modules_install

Une fois que l’on a un kernel, on peut le recopier dans le répertoire accessible par tftp.

$> cp arch/arm/boot/zImage.fix /tftpboot

Le File System sur une Compact Flash

La carte TS7200 est équipé d’un lecteur de Compact Flash. On en profitera pour mettre le File System dessus.

Il faut dans un premier temps, il faut créer une partition sur la carte CF. On connect la carte mémoire sur le PC.

Sur un PC linux, si la carte Flash est montée automatiquement, on la démonte.

$> umount /dev/sdc1

Puis on utilise l’outils fdisk.

$> fdisk /dev/sdc1

puis

  1. d (pour effacer les partitions existantes. A répéter pour toutes les partitions)
  2. n (Pour les nouvelles partitions)
  3. p (Pour les partitions primaires)
  4. 1 (Faire la partition primaire n°1)

Touche {{Enter}} pour le premier cylindre par défaut

Touche {{Enter}} pour le dernier cylindre par défaut

p (Afficher la table des partitions)

Si la première partition n’a pas d’étoile sur le champ Boot,

  1. Appuyer sur la touche ‘a’ puis ‘1’ pour mettre la première partition comme bootable.
  2. Pour valider ces changements, appuyer sur ‘w’ pour écrire la nouvelle table sur le disque.

Puis on crée le système de fichier, EXT2 dans notre cas, pour qu’il soit accessible par redboot.

$> mkfs.ext2 /dev/sdc1

Une fois la mémoire Compact Flash formatée, on compresse le file system.

$> cd ~/Projets/ts7200/rootfs-debian
 $> tar cjvf ../rootfs-debian.bz2 *

Puis on le décompresse dans la Compact Flash

$> mount /dev/sda1 /media/disk
 $> cd /media/disk
 $> tar -xjvf ~/Projets/ts7200/rootfs-debian.bz2

Pour vérifier l’intégrité de la Flash, on peut utiliser

$> fsck /dev/sdc1

Cintré-Rennes Atalante-Cintré

Comme ce circuit passe dans Rennes, il est conseillé de le faire plutôt le dimanche.

  • Cintré
  • Le Rheu
  • Vézin le Coquet
  • Rennes
  • Rennes Atalante
  • Betton
  • La Chapelle des Fougeretz
  • Parthenay de Bretagne
  • Saint Gilles
  • La Chapelle Thouarault
  • Cintré

Cintre-RennesAtalante-Cintre

 

Détails du parcours

 

Nombre de track point 
Distance61.30 Kms
Altitude mini30 m
Altitude maximum98 m
Dénivelé positif+223m

Relevé de l’altitude

 

Cintre-RennesAtalante-Cintre-Elevation

Temps de parcours

 

DateDuréeMoyenneMétéoNotes
07/02/20102h38mn23.2 Km/hEnsoleillé, 7°