OpenWrt Kamikaze SVN sur La Fonera 2.0

La population de Fonera (FON2100) et Fonera 2 (FON2202) chez moi ne cesse d’augmenter. Ceci permet de jouer à la fois avec le firmware Fon et OpenWrt. L’une de mes FON2202 est maintenant flashée avec OpenWrt Kamikaze et tout va pour le mieux. Retour d’expérience…

Le firmware utilisé est un checkout SVN :
% cd kkpart
% svn checkout https://svn.openwrt.org/openwrt/trunk/ kamikaze
% cd kamikaze
% ./scripts/feeds update
% make package/symlinks
% wget http://www.lefinnois.net/Atheros_fonera2.config
% make menuconfig
On utilise «Load an Alternate Configuration File» pour charger Atheros_fonera2.config et obtenir une configuration adaptée pour la plateforme. Il s’agit de mon fichier de configuration, basé celui utilisé pour le build snapshot de septembre. Il ne reste ensuite plus qu’à créé le monde :
% make world
On retrouve ensuite dans bin les images à flasher sur La Fonera : openwrt-atheros-root.jffs2-64k et openwrt-atheros-vmlinux.lzma. On connecte ensuite la console de La Fonera et on reset. Un petit CTRL+C lors du temps de pause offert par RedBoot et on flash. La procédure est identique à celle utilisée pour une Fonera+. On n’oublie pas de changer la configuration de RedBoot. Voici pour le serveur TFTP via xinetd :
% cat /etc/xinetd.d/tftp2
service tftp
{
        disable         = no
        socket_type     = dgram
        protocol        = udp
        wait            = yes
        user            = root
        server          = /usr/sbin/in.tftpd
        server_args     = -v -s /mnt/six4/kamikaze/bin
}
On n’oublie pas non plus, pour la suite, de configurer un serveur HTTP pour installer les paquets OPKG (Lighttpd fait parfaitement l’affaire, comme pour beaucoup d’applications d’ailleurs).

Côté système embarqué, après un premier démarrage, on s’occupe de la configuration. D’abord OPKG
root@OpenWrtF2:~# cat /etc/opkg.conf
src/gz snapshots http://192.168.0.1/packSVN
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
On installe ensuite les paquets wpa-supplicant, hostapd et libopenssl via opkg install. On en profite également pour installer les modules pour le support USB. Pour moi :
kmod-usb-core – 2.6.26.5-atheros-1 –
kmod-usb-serial – 2.6.26.5-atheros-1 –
kmod-usb-serial-ark3116 – 2.6.26.5-atheros-1 –
kmod-usb-serial-ftdi – 2.6.26.5-atheros-1 –
kmod-usb-serial-pl2303 – 2.6.26.5-atheros-1 –
kmod-usb-storage – 2.6.26.5-atheros-1 –
kmod-usb2 – 2.6.26.5-atheros-1 –
Puis on se tourne vers la configuration :
root@OpenWrtF2:~# cat /etc/config/network
# /etc/config/network
config ‘interface’ ‘loopback’
        option ‘ifname’ ‘lo’
        option ‘proto’ ‘static’
        option ‘ipaddr’ ‘127.0.0.1’
        option ‘netmask’ ‘255.0.0.0’

config ‘interface’ ‘lan’
        option ‘type’ ‘bridge’
        option ‘proto’ ‘static’
        option ‘netmask’ ‘255.255.255.0’
        option ‘ifname’ ‘eth0.0’
        option ‘ipaddr’ ‘192.168.0.25’

config ‘interface’ ‘wan’
        option ‘ifname’ ‘eth0.1’
        option ‘proto’ ‘static’
        option ‘netmask’ ‘255.255.255.0’
        option ‘ipaddr’ ‘192.168.10.10’
root@OpenWrtF2:~# cat /etc/config/wireless
config wifi-device  wifi0
        option type        atheros
        option channel     auto
        option disabled    0
        option channel     6
        option disabled    0
        option diversity   0
        option txantenna   1
        option rxantenna   1
        option mode        11bg

config wifi-iface
        option device     wifi0
        option network    lan
        option mode       ap
        option ssid       OWRT_F2
        option encryption psk
        option key        ‘1234567890’
        option txpower    ’18’

config wifi-iface
        option device     wifi0
        option mode       ap
        option ssid       OWRT_F2b
        option encryption psk
        option key        ‘0987654321’
        option txpower    ’18’
J’utilise ici les deux SSID disponible pour obtenir ath0 et ath1. ath0 et eth0.0 sont bridgés sous br-lan. eth0.1 est configuré sur un autre réseau et ath1, bien que configuré en Master, n’est pas adressé. On verra plus tard, ce n’est pas une configuration de production.

Si on jete un œil sur /etc/fstab on voit que : « WARNING: this is an auto generated file, please use uci to set static filesystems« . Ce fichier est généré au démarrage. Par défaut, une clef USB en /dev/sda1 sera montée dans /home et /dev/sda2 utilisée en swap (??). Inutile de tout casser, on change cela en passant par :
root@OpenWrtF2:~# cat /etc/config/fstab
config mount
        option target   /proc/bus/usb
        option device   none
        option fstype   usbfs
        option options  defaults
        option enabled  0
Il y a, apparement, quelques problèmes avec les périphériques USB 1. Mes adaptateurs USB/série/TTL par exemple. La simple connexion plante littéralement le contrôleur USB. La connexion ne « remonte » rien et toutes connexions d’un autre périphérique USB ne provoque plus aucune réaction. L’utilisation d’un hub USB 2.0 règle le problème. Bug du pilote ? Du contrôleur USB ? Limitation technique ? Aucune idée.

Quoi qu’il en soit, l’USB fonctionne à merveille en dehors de ce point :
root@OpenWrtF2:~# cat /proc/bus/usb/devices | grep -e « ^[P|S|C] »
P:  Vendor=1d6b ProdID=0002 Rev= 2.06
S:  Manufacturer=Linux 2.6.26.5 ehci_hcd
S:  Product=EHCI Host Controller
S:  SerialNumber=0000:00:00.1
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA

P:  Vendor=0409 ProdID=005a Rev= 1.00
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA

P:  Vendor=0403 ProdID=6001 Rev= 6.00
S:  Manufacturer=FTDI
S:  Product=FT232R USB UART
S:  SerialNumber=A90066ai
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 90mA

P:  Vendor=0409 ProdID=005a Rev= 1.00
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA

P:  Vendor=6547 ProdID=0232 Rev= 0.01
S:  Manufacturer=ArkMicroChips
S:  Product=USB-UART Controller
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA

P:  Vendor=08ec ProdID=0008 Rev= 1.00
S:  Manufacturer=Intuix
S:  Product=DiskOnKey
S:  SerialNumber=0DB15550F3830A3A
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=200mA
Côté GPIO, puisque certains s’y intéressent, tout semble être utilisé soit par les leds, soit par le contrôle du reset (le bouton sous La Fonera). En revanche le contrôle des leds est grandement facilité par le support directe du noyau. On se retrouve avec un chouette répertoire :
root@OpenWrtF2:~# ls /sys/class/leds/
gpio1  gpio3  gpio4  gpio7  wlan
root@OpenWrtF2:~# ls /sys/class/leds/gpio7/
brightness  device      subsystem   trigger     uevent
Et là, ça devient intéressant :
root@OpenWrtF2:~# echo 1 > /sys/class/leds/gpio7/brightness
Et voici que la led POWER s’allume en orange. Voici les correspondances :

gpio7 : POWER orange (led bicolore)
gpio4 : POWER vert (led bicolore)
gpio3 : USB vert (led standard)
gpio1 : WIRELESS orange (led bicolore)
wlan : WIRELESS vert (led bicolore)
INTERNET : eth0.1
COMPUTER : eth0.0

Mais le plus intéressant est le fichier trigger permettant de définir le contrôle d’une led :
root@OpenWrtF2:~# cat /sys/class/leds/gpio7/trigger
[none] timer heartbeat default-on netdev
root@OpenWrtF2:~# echo heartbeat > /sys/class/leds/gpio7/trigger
Et voici que la led POWER clignote comme un battement de cœur en orange. Ou encore :
root@OpenWrtF2:~# echo timer > /sys/class/leds/gpio7/trigger
root@OpenWrtF2:~# ls /sys/class/leds/gpio7/
brightness  delay_off   delay_on    device      subsystem   trigger     uevent
root@OpenWrtF2:~# echo 50 > /sys/class/leds/gpio7/delay_on
root@OpenWrtF2:~# echo 1500 > /sys/class/leds/gpio7/delay_off
Et la même led pulse avec une durée allumée de 50ms et éteinte de 1500ms. C’est beau :)

6 commentaires sur “OpenWrt Kamikaze SVN sur La Fonera 2.0

  1. Ralala le finnois nous a trouvé de quoi faire un chenillard et sans prendre le fer à souder..
    Bon j'ai un petit souci, ma fonera2 (firm 2.1.0.1) refuse désespérément de communiquer avec ma bonne vieille freebox v4 (en non dégroupé). Par contre elle voit bien tout le reste du matos connecté sur ce réseau.

    Pareil si je compile depuis OpenWRT trunk, ou si je recompile FON.
    L'interface WAN configurée en IP statique, pareil, elle fait la sourde ma fonera…

    Par contre pas de pb avec le firmware 2.0.1.1 (livré d'origine) ou kamikaze 7.09
    Pour info j'avais rencontré exactement le même souci début octobre sur ma fonera+ lorsque je l'avais flashée avec le firmware 2.1.0.1
    Si je configure un PC de mon réseau avec ICS (partage de connexion, beurk ..) ben là tout va bien.

    Quelqu'un aurait rencontré le problème, ou mieux aurait une idée ? Demander à Josette? Je vais essayer ton fichier de config en attendant…

    Ah oui dernier truc, la fonera2 en cliente wifi de la freebox, aucun problème.

  2. Excellent le coup du /sys/class/leds
    Ça me donne une idée qui simplifierai énormément mon projet.
    Je souhaite contrôler des servos de modélisme depuis une Fonera. Pour piloter un servo il faut envoyer des impulsions variants entre 1ms et 2ms (le neutre est à 1.5ms) espacées d'environ 20ms en TTL.
    Je pourrai tout simplement mettre un octocoupleur en substitution/dérivation d'une DEL de la fonera et piloter le tout avec /sys/class/leds
    Évidement la base de temps du timer ne me permet que 2 positions pour mon servo ;-(( Mais il me semble si je ne m'abuse que je peux passer la base de temps en micro-seconde en remplaçant :
    mod_timer(&timer_data->timer, jiffies + msecs_to_jiffies(delay));
    par :
    mod_timer(&timer_data->timer, jiffies + usecs_to_jiffies(delay));

    dans le fichier /linux-source/drivers/leds/ledtrig-timer.c

    Du coup cela me donne 1000 positions possibles pour mon servo entre 1000 et 2000 usec
    Par contre si la fonction timer est utiliser ailleurs pour les leds dans le firmare, ça va clignoter un peu vite….

    Est-ce que cela parait jouable ??

  3. Hop hop merci Mr Lefinnois pour cet article assez énorme !!

    Quelqu'un a t'il une méthode pour sauvegarder facilement le firmware original de la fonera 2 via ssh ou redboot ?

  4. Hi. I followed your guide and i managed to flash my fonera 2.0 with openwrt. I’ve also installed the packets needed for usb as you suggest. If i insert a usb pen, I’m not able to mount it. I wrote in the console:
    root@OpenWrt:/# mount -t vfat /dev/sda1 /mnt/usbdrive/
    mount: mounting /dev/sda1 on /mnt/usbdrive/ failed: Invalid argument

    if i look in fstab:
    cat /etc/fstab
    # WARNING: this is an auto generated file, please use uci to set static filesystems
    /dev/sda1 /home ext3 noauto,rw,sync 0 0
    but the filesystem is fat32. In someway openwrt autogenerate this file. I also tried to replace fstab with:
    config mount
    option target /proc/bus/usb
    option device none
    option fstype usbfs
    option options defaults
    option enabled 0

    dmesg:
    USB Universal Host Controller Interface driver v3.0
    Initializing USB Mass Storage driver…
    scsi0 : SCSI emulation for USB Mass Storage devices
    usbcore: registered new interface driver usb-storage
    USB Mass Storage support registered.
    usb-storage: device found at 2
    usb-storage: waiting for device to settle before scanning
    scsi 0:0:0:0: Direct-Access CBM Flash Disk 5.00 PQ: 0 ANSI: 2
    sd 0:0:0:0: [sda] 2072064 512-byte hardware sectors (1061 MB)
    sd 0:0:0:0: [sda] Write Protect is off
    sd 0:0:0:0: [sda] Mode Sense: 0b 00 00 08
    sd 0:0:0:0: [sda] Assuming drive cache: write through
    sd 0:0:0:0: [sda] 2072064 512-byte hardware sectors (1061 MB)
    sd 0:0:0:0: [sda] Write Protect is off
    sd 0:0:0:0: [sda] Mode Sense: 0b 00 00 08
    sd 0:0:0:0: [sda] Assuming drive cache: write through
    sda: sda1
    sd 0:0:0:0: [sda] Attached SCSI removable disk
    usb-storage: device scan complete
    FAT: codepage cp437 not found

    What do i have to do?
    thanks

  5. Avec Kamaikaze 8.09_RC1, pas moyen d'utiliser l'interface WAN!
    On dirait qu'un bug a été identifié à ce niveau (https://dev.openwrt.org/ticket/4213).

    Enfin, même en passant eth0.1 en promisc, ça ne marche toujours pas!
    En configurant une IP fixe:
    – eth0.0: fonctionne, mais pas moyen de réussir "opkg update" (pourtant le réseau et le serveur de download sont visibles)
    – eth0.1: ne fonctionne pas l'IP fixe ne permet pas de joindre le réseau local??

    Je vais passer en 7.09 en attendant la sortie de la version finale 8.09…

    PS: Pour flasher j'utilise l'utilitaire de Freikunk ap51flash
    http://download.berlin.freifunk.net/fonera/

Les commentaires sont fermés.