mercredi 1 octobre 2008

Fonera et Station météo 1 - Port serie et OpenWRT

Je me suis acheté récemment pour une somme modique une Fonera. Mais je n'ai pas l'intention de faire parti du réseau FON. L'utilité que je vois à  celle-ci est de disposer d'un système embarqué supportant linux et disposant d'un port série, réseau et wifi.

Le projet

Fonera
En effet ce genre de petite carte à  faible consommation revient généralement assez cher ! Vous trouverez quelques exemples dans mes bookmarks mais il est difficile de trouver quelque chose à  moins de 60EUR port exclu. La Fonera se présente alors comme une alternative crédible même si ses possibilités sont assez limitées.
Mon but est, à  terme, de l'utiliser comme mini-serveur web pour accéder aux données de ma station météo. Elle devrait pouvoir remplacer avantageusement un PC complet pour ce simple service. Ses capacités semblent tout-à -fait suffisantes :
  • support de Linux et en particulier de l'excellent OpenWRT ;
  • port série pour dialoguer avec la station ;
  • interface réseau filaire et Wifi ;
  • 4 GPIO disponibles sur lesquels on peut connecter une SD card pour la capacité de stockage.
Bref tout ce qui est nécessaire pour seulement 15EUR dans mon cas et pour une consommation électrique sans commune mesure : 3.2W en pic au boot et 2.6W en idle[1].
WS2300Les étapes nécessaires à  ce projet sont donc :
  1. réalisation d'un connecteur pour le port série ;
  2. flashage de la Fonera avec OpenWRT ;
  3. configuration/modification pour rendre le port série disponible pour la station météo ;
  4. compilation de open2300 sur la fonera ;
  5. réalisation du support de stockage de masse (SDcard) ;
  6. configuration du serveur web.
Rien de révolutionnaire dans ce projet, toutes les étapes sont déjà  parfaitement documentées un peu partout sur le web.

Connecteur série

Première étape, la réalisation d'un connecteur pour le port série.
Je ne vais pas détailler le montage, tout est déjà  très bien expliqué sur l'excellent blog de Denis Bodor[2] (y'a même un typon). Autant vous prévenir tout de suite, c'est une référence en ce qui concerne le hack de Fonera. D'ailleurs regardez le dernier article du GLMF de ce mois :)
D'abord, un petit test sur plaque d'essai. J'ai utilisé des transistors 2N2218 plutôt que les 2N2222 car c'est ce que mon fournisseur[3] avait en stock :)
essai essai
Attention, sur le Wiki OpenWRT, RXD et TXD du port fonera correspondent au coté PC ! Chez Denis par contre c'est OK.
Ensuite, la mise en place sur plaque pastillée. Les composants sont assez serrés car je veux loger tout ça dans une petite boite. Comme l'ensemble du montage sera à  coté de la station météo dans le salon, il faut que ça reste relativement propre.
placement recto verso
La nappe coté fonera est découpée dans une nappe IDE, celle coté PC vient d'une poubelle. J'ai du acheter la boite chez Selectronic pour un projet oublié depuis :)
Et voila, la Fonera est branchée et dialogue avec le PC !
fini

Quelques trucs avant de flasher

On peut commencer par se connecter en ssh[4] via le réseau filaire.
# autorise les connections tcp
iptables        -A input_rule      -i eth0 -p tcp  -j ACCEPT
iptables -t nat -A prerouting_rule -i eth0 -p tcp  -j ACCEPT
# lance dropbear
/etc/init.d/dropbear
On attend un peu que les clefs soient générées, puis :
ssh root@192.168.0.149  ## bien sur remplacez par l'adresse de votre fonera !
root@192.168.0.149's password: admin
Voila, c'est plus convivial que le lien série.
Ensuite, on sauvegarde les partitions actuelles. La méthode proposée sur le wiki OpenWRT ne fonctionne pas chez moi, j'en ai trouvé une autre ici
cd /dev/mtd
for f in *ro; do echo -n "processing $f."; cat $f | gzip >/tmp/$f.gz; echo " Done."; done
scp /tmp/*.gz jjl@penfret:/home/jjl/
Conservez aussi le contenu du fichier /proc/mtd

Flasher avec OpenWRT

logo Je me propose d'utiliser ici la méthode RedBoot via port série. Une autre très courrue est via telnet.
On installe un serveur tftpd, par exemple sur une ubuntu :
sudo aptitude install tftpd
Chez moi, il est lancé à  la demande par inetd. Les fichiers à  servir sont situés dans /srv/tftp[5], répertoire à  créer. On récupère alors le noyau et le filesystem pour atheros (le processeur de la fonera)
cd /srv/tftp
wget http://downloads.openwrt.org/kamikaze/7.09/atheros-2.6/openwrt-atheros-2.6-vmlinux.lzma
wget http://downloads.openwrt.org/kamikaze/7.09/atheros-2.6/openwrt-atheros-2.6-root.squashfs
La, je vous conseille de suivre cette méthode. Ne recopiez pas directement les lignes suivantes, allez lire l'article pour avoir toutes les explications !
RedBoot> ip_address -h 192.168.0.105 -l 192.168.0.149/24
RedBoot> fis init
RedBoot> lo -r -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma
RedBoot> fi cr -e 0x80041000 -r 0x80041000 vmlinux.bin.l7
RedBoot> fis free
La vous faites la différence entre les deux valeurs hexa données.
RedBoot> lo -r -b %{FREEMEMLO} openwrt-atheros-2.6-root.squashfs
RedBoot> fi cr -l 0x6F0000 rootfs ## Remplacez la valeur par la différence précédement calculée
RedBoot> fis load -l vmlinux.bin.l7
RedBoot> exec
Ne reste plus qu'a adapter la configuration comme le dhcp, le password root à  définir ...
Voila pour aujourd'hui. Prochaine étape, construire un environnement de cross-compilation pour régénérer un openwrt et open2300

Liens utiles

Je ne vais pas vous lister ici tous les liens sur la fonera ou OpenWrt, mais juste ceux qui me paraissent le plus pertinents dans mon cas.
Tout d'abord ceux qui ont eu la même idée que moi :
  • EquinoxeFR mais j'ai l'impression qu'il a changé de politique après l'étape 1
  • Puis ici openwrt/open2300 mais sur un routeur Asus
  • open2300 pour WhiteRussian
Puis sur la Fonera

Notes

[1] sans le wifi
[2] Quoi ? Il n'est pas encore dans vos flux RSS ! Mais ajoutez-le immédiatement !
[3] qu'il soit béni jusqu'à  la 7ème génération
[4] en one-shot, au prochain démarrage, il faudra recommencer
[5] voir /etc/inetd.conf


Commentaires du post original

Aucun commentaire:

Enregistrer un commentaire