tic: symbol lookup error: tic: undefined symbol: _nc_check_termtype2

Oh, la belle erreur à la construction d’OpenWrt ! Après avoir creusé un peu il s’avère que le problème ne vient pas du tout d’OpenWrt ou du ncurses compilé mais d’un problème de version des outils ncurses du système hôte. Un petit coup d’apt-get install ncurses-base ncurses-bin ncurses-term et tout marche.

Si vous avez le même problème, mettez tout simplement votre système hôte à jour.

Vas-y josette sort le crémant, y'a OpenWrt qui tourne sur la Fonera+

Oui, vous avez bien lu ! Le dernier snapshot d’OpenWrt (20080910) passe comme une lettre par la poste et je dois dire que c’est un vrai bonheur. Après download de l’image rootfs (openwrt-atheros-root.jffs2-64k) et du kernel (openwrt-atheros-vmlinux.lzma) on flash tranquillement tout ça comme d’habitude via RedBoot et un adaptateur console judicieusement connecté au port qui va bien.

Le démarrage est des plus classique :
+Ethernet eth0: MAC address 00:00:00:00:0:00
IP: 192.168.10.10/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.10.1

RedBoot(tm) bootstrap and debug environment [ROMRAM]
OpenWrt certified release, version 1.1 – built 22:32:28, May 7 2007
Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.

Board: FON 2201
RAM: 0x80000000-0x81000000, [0x80040290-0x80fe1000] available
FLASH: 0xa8000000 – 0xa87f0000, 128 blocks of 0x00010000 bytes each.
== Executing boot script in 10.000 seconds – enter ^C to abort
La Fonera+, ou plus exactement la FON2201, avec le firmware par défaut utilise un second bootloader (stage2 quoi) qui lui-même charge le kernel, etc… Le firmware OpenWrt n’a pas besoin de cela. Tout fonction exactement comme avec une Fonera classique (vieille maintenant). On flash donc exactement de la même manière à grands coups de :
fis init

ip_address -l 192.168.10.10/24 -h 192.168.10.1

load -r -b 0x80041000 openwrt-atheros-2.6-root.jffs2-64k
fis create -b 0x80041000 -f 0xA8030000 -l 0x006F0000 -e 0x00000000 rootfs

load -r -b 0x80041000 openwrt-atheros-2.6-vmlinux.lzma
fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
On patiente puis on s’occupe de la configuration de Redboot qui appel l’ancien loader :
RedBoot> fconfig -l -n
boot_script: true
boot_script_data:
.. fis load -b 0x80100000 loader
.. go 0x80100000

boot_script_timeout: 2
bootp: false
bootp_my_gateway_ip: 0.0.0.0
bootp_my_ip: 192.168.1.1
bootp_my_ip_mask: 255.255.255.0
bootp_server_ip: 192.168.1.254
console_baud_rate: 9600
gdb_port: 9000
info_console_force: false
net_debug: false
On corrige :
RedBoot> fconfig
Run script at boot: true
Boot script:
.. fis load -b 0x80100000 loader
.. go 0x80100000
Enter script, terminate with empty line
>> fis load -l vmlinux.bin.l7
>> exec
>>
Boot script timeout (1000ms resolution): 10
Use BOOTP for network configuration: false
Gateway IP address:
Local IP address: 192.168.10.10
Local IP address mask: 255.255.255.0
Default server IP address: 192.168.10.1
Console baud rate: 9600
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false
Update RedBoot non-volatile configuration – continue (y/n)?y
On reboot avec un petit reset. Et là ! Là, la magie arrive (je met une tartine mais, regardez bien, ça brille) :
RedBoot> fis load -l vmlinux.bin.l7
Image loaded from 0x80041000-0x80297085
RedBoot> exec
Now booting linux kernel:
Base address 0x80030000 Entry 0x80041000
Cmdline :
Linux version 2.6.26.3 (andy@devsandbox.padded-cell.net)
(gcc version 4.1.2) #1 Tue Sep 9 17:29:16 PDT 2008
CPU revision is: 00019064 (MIPS 4KEc)
Determined physical RAM map:
memory: 01000000 @ 00000000 (usable)
Initrd not found or empty – disabling initrd
Zone PFN ranges:
Normal 0 -> 4096
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
0: 0 -> 4096
Built 1 zonelists in Zone order, mobility grouping off. Total pages: 4064
Kernel command line: console=ttyS0,9600 rootfstype=squashfs,jffs2 init=/etc/preinit
Primary instruction cache 16kB, VIPT, 4-way, linesize 16 bytes.
Primary data cache 16kB, 4-way, VIPT, no aliases, linesize 16 bytes
PID hash table entries: 64 (order: 6, 256 bytes)
console [ttyS0] enabled
Dentry cache hash table entries: 2048 (order: 1, 8192 bytes)
Inode-cache hash table entries: 1024 (order: 0, 4096 bytes)
Memory: 13480k/16384k available (1943k kernel code, 2904k reserved, 323k data, 128k init, 0k highmem)
SLUB: Genslabs=6, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Mount-cache hash table entries: 512
net_namespace: 644 bytes
NET: Registered protocol family 16
Radio config found at offset 0xf8(0x1f8)
AR531x PCI init…
done
PCI: fixing up device 0,3,0
PCI: Failed to allocate mem resource #1:4000000@84000000 for 0000:00:00.0
PCI: Failed to allocate mem resource #1:4000000@84000000 for 0000:00:03.0
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 512 (order: 0, 4096 bytes)
TCP bind hash table entries: 512 (order: -1, 2048 bytes)
TCP: Hash tables configured (established 512 bind 512)
TCP reno registered
NET: Registered protocol family 1
ar531x: Registering GPIODEV device
squashfs: version 3.0 (2006/03/15) Phillip Lougher
Registering mini_fo version $Id$
JFFS2 version 2.2. (NAND) (SUMMARY) © 2001-2006 Red Hat, Inc.
msgmni has been set to 26
io scheduler noop registered
io scheduler deadline registered (default)
gpiodev: gpio device registered with major 254
gpiodev: gpio platform device registered with access mask FFFFFFFF

Serial: 8250/16550 driver $Revision: 1.90 $ 1 ports, IRQ sharing disabled
serial8250: ttyS0 at MMIO 0xb1100003 (irq = 37) is a 16550A
eth0: Atheros AR231x: 00:18:84:a0:5b:98, irq 4
ar2313_eth_mii: probed
eth0: Marvell 88E6060 PHY driver attached.
eth0: attached PHY driver [Marvell 88E6060] (mii_bus:phy_addr=0:1f)

cmdlinepart partition parsing not available
Searching for RedBoot partition table in spiflash at offset 0x7d0000
Searching for RedBoot partition table in spiflash at offset 0x7e0000
6 RedBoot partitions found on MTD device spiflash
Creating 6 MTD partitions on « spiflash »:
0x00000000-0x00030000 : « RedBoot »
0x00030000-0x00720000 : « rootfs »
mtd: partition « rootfs » set to be root filesystem
split_squashfs: no squashfs found in « spiflash »
0x00720000-0x007e0000 : « vmlinux.bin.l7 »
0x007e0000-0x007ef000 : « FIS directory »
0x007ef000-0x007f0000 : « RedBoot config »
0x007f0000-0x00800000 : « boardconfig »
Registered led device: gpio0
Registered led device: gpio1
Registered led device: wlan
Registered led device: gpio3
Registered led device: gpio4
Registered led device: gpio7

nf_conntrack version 0.5.0 (1024 buckets, 4096 max)
eth0: Configuring MAC for full duplex
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP vegas registered
NET: Registered protocol family 17
Bridge firewalling registered
802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
All bugs added by David S. Miller <davem@redhat.com>
VFS: Mounted root (jffs2 filesystem) readonly.
Freeing unused kernel memory: 128k freed
Please be patient, while OpenWrt loads …
Algorithmics/MIPS FPU Emulator v1.5
– preinit –
Press CTRL-C for failsafe
– init –
Please press Enter to activate this console. PPP generic driver version 2.4.2
device eth0.0 entered promiscuous mode
device eth0 entered promiscuous mode
br-lan: port 1(eth0.0) entering learning state
br-lan: topology change detected, propagating
br-lan: port 1(eth0.0) entering forwarding state
ipt_time loading
wlan: trunk
ath_hal: module license ‘Proprietary’ taints kernel.
ath_hal: 0.10.5.6 (AR5212, AR5312, RF5111, RF5112, RF2316, RF2317, TX_DESC_SWAP)
ath_rate_minstrel: Minstrel automatic rate control algorithm 1.2 (trunk)
ath_rate_minstrel: look around rate set to 10%
ath_rate_minstrel: EWMA rolloff level set to 75%
ath_rate_minstrel: max segment size in the mrr set to 6000 us
wlan: mac acl policy registered
ath_ahb: trunk
wifi0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
wifi0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
wifi0: H/W encryption support: WEP AES AES_CCM TKIP
ath_ahb: wifi0: Atheros 2315 WiSoC: mem=0xb0000000, irq=3

BusyBox v1.11.1 (2008-09-09 15:08:51 PDT) built-in shell (ash)
Enter ‘help’ for a list of built-in commands.

_______ ________ __
| |.—–.—–.—–.| | | |.—-.| |_
| – || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
KAMIKAZE (bleeding edge, r12419) ——————-
* 10 oz Vodka Shake well with ice and strain
* 10 oz Triple sec mixture into 10 shot glasses.
* 10 oz lime juice Salute!
—————————————————
root@OpenWrt:/#
C’est bô ! On verse une larme, on s’essuit, on se mouche un bon coup et on se prépare pour les grandes émotions :
root@OpenWrt:/# cat /proc/net/dev
Inter-| Receive
face |bytes packets errs drop fifo…
lo: 0 0 0 0 0…
eth0: 0 0 0 0 0…
eth0.0: 0 0 0 0 0…
eth0.1: 0 0 0 0 0…
br-lan: 0 0 0 0 0…
wifi0: 0 0 0 0 0…
Mais ?! Mais le support VLAN intégré est configuré et fonctionne ! On a même droit à un bridge :
brctl show
bridge name bridge id STP enabled interfaces
br-lan 8000.001884a05b98 no eth0.0
J’aime pas pour les test, on revoit ça temporairement :
root@OpenWrt:/# ifconfig br-lan down
br-lan: port 1(eth0.0) entering disabled state
root@OpenWrt:/# brctl delbr br-lan
device eth0.0 left promiscuous mode
br-lan: port 1(eth0.0) entering disabled state
root@OpenWrt:/# ifconfig eth0.0 192.168.10.10
root@OpenWrt:/# ifconfig eth0.1 192.168.0.24
Et :
root@OpenWrt:/# ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1): 56 data bytes
64 bytes from 192.168.0.1: seq=0 ttl=64 time=1.912 ms
64 bytes from 192.168.0.1: seq=1 ttl=64 time=1.475 ms
root@OpenWrt:/# ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1): 56 data bytes
64 bytes from 192.168.10.1: seq=0 ttl=64 time=2.538 ms
64 bytes from 192.168.10.1: seq=1 ttl=64 time=1.460 ms
Allez, juste pour le plaisir :
root@OpenWrt:/# arp
IP address HW type Flags HW address Mask Device
192.168.10.1 0x1 0x2 00:0d:60:cb:5a:27 * eth0.0
192.168.0.1 0x1 0x2 00:19:66:2e:b2:13 * eth0.1
Bien, on revoit la configuration, ce coup-ci on se passera d’uci et on va taper directement dans les fichiers de configuration :
# /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.24’

config ‘interface’ ‘wan’
option ‘ifname’ ‘eth0.1’
option ‘proto’ ‘static’
option ‘netmask’ ‘255.255.255.0’
option ‘ipaddr’ ‘192.168.10.10’
# /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 OWRTplus
option encryption psk
option key ‘coucou’
option txpower ’18’
On passera en DHCP plus tard (j’ai pas envie de tripotter la config, trop excité), en attendant, on reboot et on continu :
root@OpenWrt:/# cat > /etc/resolv.conf
nameserver 80.10.246.130
nameserver 80.10.246.3
root@OpenWrt:/# route add default gw 192.168.0.10
root@OpenWrt:/# ping www.google.com
PING www.google.com (209.85.129.147): 56 data bytes
64 bytes from 209.85.129.147: seq=0 ttl=239 time=47.223 ms
64 bytes from 209.85.129.147: seq=1 ttl=239 time=47.247 ms
Bien, la Fonera+ accède au net. Ca veut dire qu’on peut installer des choses. ipkg y’a plus, voici opkg et il est préconfiguré :
root@OpenWrt:/# cat /etc/opkg.conf
src snapshots http://downloads.openwrt.org/snapshots/atheros/packages
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists

root@OpenWrt:/# opkg update

root@OpenWrt:/# opkg install wpa-supplicant
Installing wpa-supplicant (0.6.3-1) to root…
Configuring wpa-supplicant

root@OpenWrt:/# opkg install hostapd
Installing hostapd (0.6.4-1) to root…
Installing libopenssl (0.9.8h-1) to root…
Installing zlib (1.2.3-5) to root…
Configuring hostapd
Configuring libopenssl
Configuring zlib
Là, à ce moment précis, je ronronne…. et je reboot. ET LA… C’EST LE DRAME !
device ath0 entered promiscuous mode
br-lan: port 2(ath0) entering learning state
br-lan: topology change detected, propagating
br-lan: port 2(ath0) entering forwarding state
br-lan: port 2(ath0) entering disabled state
device ath0 left promiscuous mode
br-lan: port 2(ath0) entering disabled state
Après moult recherches je lance finalement :
root@OpenWrt:/etc/init.d# /sbin/wifi down
root@OpenWrt:/etc/init.d# /sbin/wifi up
Configuration file: /var/run/hostapd-ath0.conf
Line 10: invalid WPA passphrase length 6 (expected 8..63)
WPA-PSK enabled, but PSK or passphrase is not configured.
2 errors found in configuration file ‘/var/run/hostapd-ath0.conf’
enable_atheros(wifi0): Failed to set up hostapd for interface ath0
Ok, je me cache derrière mon clavier et je change gentillement ma passphrase… hum hum. Allez pour être sûr un petit reboot. Et tout marche. Voici une Fonera+ avec un OpenWrt, deux ports ether, un bridge, et un AP WPA qui roule…

Les gars d’OpenWrt là, ils brillent la nuit et ont des poils de partout, pas de doute. Y’a encore à dire sur cette version, mais ce sera pour un prochain billet.

Fonera+ et le firmware Fon

OpenWrt est un projet OpenSource dont beaucoup, sinon la plupart des éléments sont sous GPL. Les modifications apportées aux codes GPL par Fon doivent donc être rediffusées si le binaire l’est. Fon a donc mis à disposition les sources du firmware. Comme c’est souvent le cas, la documentation concernant les modifications apportées et la marche à suivre est pauvre, voir inexistante.

Voici quelques éléments spécifiques au firmware Fon pour La Fonera+ :

Utilisation d’un bootloader stage2 Meraki : Redboot ne charge pas directement le noyau Linux mais un second bootloader (stage2) qui charge une image du système en mémoire :

Failsafe loader v0.2

Looking for board config data… found at offset 0xa87f0000
Reset button GPIO: 6
Reading flash from 0xa8040000 to 0xa81fe30a… done.
Verifying CRC… OK – 0xc0d3c841

L’image du système stockée en Flash n’est pas une image jffs2 mais une concaténation d’une somme de contrôle, du kernel compressé lzma et du système de fichier. L’image est produite avec un script Perl appelé fonimage.pl. Celui-ci nécessite la présence du module Digest::CRC

Le système de fichiers utilisé est squashfs.

Les sources du firmware livrées par Fon utilisent un profile de plateforme différent d’atheros-2.6 : fonera-2.6. L’entrée dans le répertoire target/linux est un lien symbolique. Fon souhaiterait-il intégrer la Fonera comme plateforme dans le projet OpenWrt ? Ce répertoire contient les patchs, les pilotes, les Makefiles et les scripts permettant de produire une image à flasher sur la Fonera+. C’est donc là qu’il faut toucher pour obtenir un firmware Fon jffs2 sans Meraki. Cet essai a été fait mais la prise en charge de l’interface réseau bloque le boot tout comme l’intégration du pilote dans Kamikaze 7.07.

Le firmware Fon intègre un grand nombre de codes propres au projet. Il s’agit, pour la plupart, de versions modifiées d’outils existant. C’est peut-être là qu’il faut chercher la solution au problème d’interface. Un script initialise ou configure sans doute eth0/eth1.

Une tentative de reconfiguration des sources Fon en n’utilisant pas le bootloader stage2 et le système de fichier squashfs donne un résultat identique à celui obtenu par une tentative de portage du code du pilote ethernet ar2313 (copie de ar2313.[c|h] dans les sources Kamikaze 7.07) :
Board: FON 2201
RAM: 0x80000000-0x81000000, [0x80040290-0x80fe1000] available
FLASH: 0xa8000000 – 0xa87f0000, 128 blocks of 0x00010000 bytes each.
== Executing boot script in 2.000 seconds – enter ^C to abort
RedBoot> fis load -l vmlinux.bin.l7
Image loaded from 0x80041000-0x80285086
RedBoot> exec
Now booting linux kernel:
Base address 0x80030000 Entry 0x80041000
Cmdline :
Linux version 2.6.21.5 (denis@morgane) (gcc version 4.1.2)
#11 Tue Sep 25 15:53:12 CEST 2007
CPU revision is: 00019064
Determined physical RAM map:
memory: 01000000 @ 00000000 (usable)
Initrd not found or empty – disabling initrd
Built 1 zonelists. Total pages: 4064
Kernel command line: console=ttyS0,9600 rootfstype=squashfs,jffs2 init=/etc/preinit
Primary instruction cache 16kB, physically tagged, 4-way, linesize 16 bytes.
Primary data cache 16kB, 4-way, linesize 16 bytes.
Synthesized TLB refill handler (20 instructions).
Synthesized TLB load handler fastpath (32 instructions).
Synthesized TLB store handler fastpath (32 instructions).
Synthesized TLB modify handler fastpath (31 instructions).
PID hash table entries: 64 (order: 6, 256 bytes)
Using 92.000 MHz high precision timer.
Dentry cache hash table entries: 2048 (order: 1, 8192 bytes)
Inode-cache hash table entries: 1024 (order: 0, 4096 bytes)
Memory: 13548k/16384k available (1916k kernel code,
2836k reserved, 287k data, 116k init, 0k highmem)
Mount-cache hash table entries: 512
NET: Registered protocol family 16
Radio config found at offset 0xf8(0x1f8)
Time: MIPS clocksource has been installed.
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 512 (order: 0, 4096 bytes)
TCP bind hash table entries: 512 (order: -1, 2048 bytes)
TCP: Hash tables configured (established 512 bind 512)
TCP reno registered
squashfs: version 3.0 (2006/03/15) Phillip Lougher
Registering mini_fo version $Id$
JFFS2 version 2.2. (NAND) (C) 2001-2006 Red Hat, Inc.
io scheduler noop registered
io scheduler deadline registered (default)
Serial: 8250/16550 driver $Revision: 1.90 $ 1 ports, IRQ sharing disabled
serial8250: ttyS0 at MMIO 0xb1100003 (irq = 37) is a 16550A
PHY ID: 0000:0000
eth0: Dropping NETIF_F_SG since no checksum feature.
eth0: Atheros AR231x: 00:18:84:a0:5b:98, irq 4
Initialising Marvell switch…
L’initialisation du switch permettant d’avoir les deux interfaces gèle le kernel. Deux solutions, soit le code est naze (il est déjà brouillon) et inutilisable, soit le bootloader stage2 initialise d’une manière ou d’une autre les interfaces. Un coup d’oeil aux sources du bootloader meraki ne semble pas confirmer cette dernière hypothèse.

Moins amusant encore, si l’on cède à l’envie de restructurer encore la mémoire flash et la configuration de Redboot de manière à utiliser le bootloader stage2 et l’image concaténée, les résultats ne sont pas meilleurs. Il s’agit pourtant de construire le firmware Fon sans toucher à quoi que se soit, une simple compilation standard avec le profile « Developer » proposé. Résultat :
Failsafe loader v0.2

Looking for board config data… found at offset 0xa87f0000
Reset button GPIO: 6
Reading flash from 0xa8040000 to 0xa81fe30a… done.
Verifying CRC… OK – 0xc0d3c841
Uncompressing Linux… Ok, booting the kernel.
Linux version 2.6.19.2 (denis@morgane) (gcc version 4.1.2) #1 Wed Sep 26 10:38:57 CEST 2007
CPU revision is: 00019064
Determined physical RAM map:
memory: 01000000 @ 00000000 (usable)
Initrd not found or empty – disabling initrd
Built 1 zonelists. Total pages: 4064
Kernel command line: console=ttyS0,9600 rootfstype=squashfs,jffs2 init=/etc/preinit
Primary instruction cache 16kB, physically tagged, 4-way, linesize 16 bytes.
Primary data cache 16kB, 4-way, linesize 16 bytes.
Synthesized TLB refill handler (20 instructions).
Synthesized TLB load handler fastpath (32 instructions).
Synthesized TLB store handler fastpath (32 instructions).
Synthesized TLB modify handler fastpath (31 instructions).
PID hash table entries: 64 (order: 6, 256 bytes)
Using 92.000 MHz high precision timer.
Dentry cache hash table entries: 2048 (order: 1, 8192 bytes)
Inode-cache hash table entries: 1024 (order: 0, 4096 bytes)
Memory: 13500k/16384k available (1972k kernel code, 2884k reserved, 287k data, 112k init, 0k highmem)
Mount-cache hash table entries: 512
Checking for ‘wait’ instruction… available.
NET: Registered protocol family 16
Radio config found at offset 0xf8(0x1f8)
AR531x PCI init… done
PCI: fixing up device 0,3,0
PCI: Failed to allocate mem resource #1:4000000@84000000 for 0000:00:00.0
PCI: Failed to allocate mem resource #1:4000000@84000000 for 0000:00:01.0
PCI: Failed to allocate mem resource #1:4000000@84000000 for 0000:00:02.0
PCI: Failed to allocate mem resource #1:4000000@84000000 for 0000:00:03.0
PCI: Failed to allocate mem resource #2:400000@81400000 for 0000:00:03.0
NET: Registered protocol family 2
IP route cache hash table entries: 128 (order: -3, 512 bytes)
TCP established hash table entries: 512 (order: -1, 2048 bytes)
TCP bind hash table entries: 256 (order: -2, 1024 bytes)
TCP: Hash tables configured (established 512 bind 256)
TCP reno registered
squashfs: version 3.0 (2006/03/15) Phillip Lougher
Registering mini_fo version $Id$
JFFS2 version 2.2. (NAND) (SUMMARY) (C) 2001-2006 Red Hat, Inc.
io scheduler noop registered
io scheduler deadline registered (default)
Serial: 8250/16550 driver $Revision: 1.90 $ 1 ports, IRQ sharing disabled
serial8250: ttyS0 at MMIO 0xb1100003 (irq = 37) is a 16550A
PHY ID: 0000:0000
eth0: Dropping NETIF_F_SG since no checksum feature.
eth0: Atheros AR231x: 00:18:84:a0:5b:98, irq 4
Initialising Marvell switch… done.
cmdlinepart partition parsing not available
Searching for RedBoot partition table in spiflash at offset 0x7d0000
Searching for RedBoot partition table in spiflash at offset 0x7e0000
8 RedBoot partitions found on MTD device spiflash
Creating 8 MTD partitions on « spiflash »:
0x00000000-0x00030000 : « RedBoot »
0x00030000-0x00040000 : « loader »
0x00040000-0x007e0000 : « image »
0x000eebe9-0x007d0000 : « rootfs »
mtd: partition « rootfs » doesn’t start on an erase block boundary — force read-only
0x00200000-0x007d0000 : « rootfs_data »
0x007d0000-0x007e0000 : « config »
0x007e0000-0x007ef000 : « FIS directory »
0x007ef000-0x007f0000 : « RedBoot config »
0x007f0000-0x00800000 : « board_config »
ip_conntrack version 2.4 (128 buckets, 1024 max) – 240 bytes per conntrack
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP vegas registered
NET: Registered protocol family 1
NET: Registered protocol family 17
802.1Q VLAN Support v1.8 Ben Greear
All bugs added by David S. Miller
Time: MIPS clocksource has been installed.
VFS: Mounted root (squashfs filesystem) readonly.
Freeing unused kernel memory: 112k freed
Warning: unable to open an initial console.
Algorithmics/MIPS FPU Emulator v1.5
[sighandler]: No more events to be processed, quitting.
[cleanup]: Waiting for children.
[cleanup]: All children terminated.
Unlocking rootfs …
Could not open mtd device: rootfs
/sbin/mount_root: .: 40: Can’t open /bin/firstboot
init started: BusyBox v1.4.1 (2007-09-26 10:18:29 CEST) multi-call binary
Please press Enter to activate this console. : /sbin/hotplug-call: .: 7: Can’t open /lib/fon/config.sh
: /sbin/hotplug-call: .: 7: Can’t open /lib/fon/config.sh
PPP generic driver version 2.4.2
tun: Universal TUN/TAP device driver, 1.6
tun: (C) 1999-2004 Max Krasnyansky
: /sbin/hotplug-call: .: 7: Can’t open /lib/fon/config.sh
: /sbin/hotplug-call: .: 7: Can’t open /lib/fon/config.sh
xt_CHAOS: Could not find « TARPIT » target
IPP2P v0.8.1_rc1 loading
IMQ starting with 2 devices…
: /sbin/hotplug-call: .: 7: Can’t open /lib/fon/config.sh
IMQ driver loaded successfully.
Hooking IMQ before NAT on PREROUTING.
Hooking IMQ after NAT on POSTROUTING.
: /sbin/hotplug-call: .: 7: Can’t open /lib/fon/config.sh
ipt_time loading
wlan: 0.8.4.2 (svn r2420)
ath_hal: module license ‘Proprietary’ taints kernel.
ath_hal: 0.9.17.1 (AR5212, AR5312, RF5112, RF2316, RF2317, TX_DESC_SWAP)
ath_rate_minstrel: 1.2 (svn r2420)
Minstrel automatic rate control algorithm.
Look around rate set to 10%
EWMA rolloff level set to 75%
Max Segment size in the mrr set to 6000 us
wlan: mac acl policy registered
ath_ahb: 0.9.4.5 (svn r2420)
ath_pci: switching rfkill capability off
ath_pci: ath_pci: switching per-packet transmit power control off
wifi0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
wifi0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps
12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
wifi0: H/W encryption support: WEP AES AES_CCM TKIP
wifi0: mac 11.0 phy 4.8 radio 7.0
wifi0: Use hw queue 1 for WME_AC_BE traffic
wifi0: Use hw queue 0 for WME_AC_BK traffic
wifi0: Use hw queue 2 for WME_AC_VI traffic
wifi0: Use hw queue 3 for WME_AC_VO traffic
wifi0: Use hw queue 8 for CAB traffic
wifi0: Use hw queue 9 for beacons
wifi0: Atheros 2315 WiSoC: mem=0xb0000000, irq=3
gpio_proc: module loaded and /proc/gpio/ created
: /sbin/hotplug-call: .: 7: Can’t open /lib/fon/config.sh
: /etc/rc.common: ./base-files: 1: uci: not found
: /etc/rc.common: ./base-files: 2: uci: not found
: /etc/rc.common: ./base-files: 3: uci: not found
: /etc/rc.common: ./base-files: 4: uci: not found
: /etc/rc.common: ./base-files: 5: uci: not found
: /etc/rc.common: eval: 75: uci: not found
: /sbin/wifi: .: 1: Can’t open /lib/fon/config.sh
: /etc/rc.common: .: 7: Can’t open /lib/fon/config.sh
: /etc/rc.common: .: 7: Can’t open /lib/fon/config.sh
: /usr/lib/qos/generate.sh: .: 7: Can’t open /lib/fon/config.sh

BusyBox v1.4.1 (2007-09-26 10:18:29 CEST) Built-in shell (ash)
Enter ‘help’ for a list of built-in commands.
______ __
/ ___ /
__/ __ ___ __ _ __ __ _ ___
_/ __` /’ _ ` /’__`/`’__/’__` /___ __
/ L / / / __/ // L._ /__/ _/
_ ____/ _ _ ____ _ __/._ _
/_//___/ /_//_//____/ /_/ /__//_/ /_/

————– Fonera 1.5 Firmware (v1.1.1.1) —————–

* Based on OpenWrt – http://openwrt.org
* Powered by FON – http://www.fon.com
—————————————————–
root@OpenWrt:/#
Ici, l’interface réseau semble fonctionner, au moins elle ne bloque pas le démarrage :
PHY ID: 0000:0000
eth0: Dropping NETIF_F_SG since no checksum feature.
eth0: Atheros AR231x: 00:18:84:a0:5b:98, irq 4
Initialising Marvell switch… done.
Cependant, ce n’est qu’une belle illusion :
root@OpenWrt:/# ifconfig eth0 192.168.0.112
root@OpenWrt:/# ping 192.168.0.10
PING 192.168.0.10 (192.168.0.10): 56 data bytes
4 packets transmitted, 0 packets received, 100% packet loss

root@OpenWrt:/# arp
IP address HW type Flags HW address Mask Device
192.168.0.1 0x1 0x0 00:00:00:00:00:00 * eth0
192.168.0.10 0x1 0x0 00:00:00:00:00:00 * eth0
Voilà où j’en suis. Les investigations se poursuivent…

PS mise à jour : Je viens de remarquer une chose étrange. Les sources du firmware Fon diponibles sur download.fon.com sont différentes de celle disponible sur download.francofon.fr. En effet, l’archive provenant du site Fon ne semble pas complète. Par exemple, l’absence du fichier base64.c empêche la compilation le fonrsa. Plus j’avance sur le sujet plus je me dis que Fon comme d’autres ne fait aucun effort : les modifications ne sont pas documentées, le code ajouté est brouillon… il s’agit tout simplement de livrer, brut de fonderie, un tarball de sources… Une bonne impression de « Démerdez-vous avec ça, on fait ce que la GPL nous oblige à faire, pas plus. Ciao ».

PS mise à jour encore : MAIS ?! CA MARCHE ! Parfois on cherche quelque part ailleurs ce qui se trouve juste sous nos yeux. Dans le cas présent, il est dit que le switch est supporté. Le switch ? Et oui, il n’y a pas réellement deux interfaces mais une seule (eth0) avec un switch. L’utilisation des deux pseudo-interfaces repose tout simplement sur l’implémentation Linux de VLAN 802.1Q. En regardant de plus près le script d’init boot on remarque un discret vconfig set_name_type DEV_PLUS_VID_NO_PAD. Par ailleurs, les scripts hotplug crées les interfaces eth0.0 (LAN) et eth0.1 (WAN). Du coup, on peut désactiver un gros paquet de scripts (presque tous) pour démarrer un firmware Fon fraîchement compilé et utiliser :
root@(none):/# ifconfig eth0 up
root@(none):/# vconfig set_name_type DEV_PLUS_VID_NO_PAD
root@(none):/# vconfig add eth0 0
root@(none):/# vconfig add eth0 1
root@(none):/# ifconfig eth0.0 192.168.0.12
root@(none):/# ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1): 56 data bytes
64 bytes from 192.168.0.1: icmp_seq=0 ttl=64 time=11.9 ms
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=2.3 ms
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 2.3/7.1/11.9 ms
root@(none):/# ping 192.168.0.10
PING 192.168.0.10 (192.168.0.10): 56 data bytes
64 bytes from 192.168.0.10: icmp_seq=0 ttl=64 time=4.2 ms
64 bytes from 192.168.0.10: icmp_seq=1 ttl=64 time=3.3 ms
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 3.3/3.7/4.2 ms
root@(none):/# arp
IP address HW type Flags HW address Mask Device
192.168.0.10 0x1 0x2 00:0D:88:E7:E8:73 * eth0.0
192.168.0.1 0x1 0x2 00:13:8F:26:14:C0 * eth0.0
Ça progresse, ça progresse… Prochaine étape, oublier le bootloader stage2 et le squashfs avec le firmware fon. Puis, appliquer les modifications Fon a Kamikaze 7.07.

Fonera+ : et eth1 ?

OpenWrt 7.07 sur une Fonera+ ne supporte actuellement par correctement l’interface Ethernet. Le ping est impossible et la seconde interface c’est pas détectée. Il s’agit d’un problème connu des développeurs OpenWrt et le code n’est pas encore intégré dans les sources. Si vous installez un OpenWrt sur la Fonera+, ne vous attendez donc pas à un fonctionnement correcte.

Les recherches sur le problème ne sont pas faciles mais j’ai fini par trouver ceci : https://dev.openwrt.org/ticket/2410

Le commentaire est relativement clair :
support for the switch hasn’t been merged yet. the code still needs some cleanup
Pourtant, la Fonera+, FON2201, le FonSPOT… avec le firmware Fon n’a aucun problème à ce niveau. Le code présent dans l’OpenWrt made in Fon est-il celui décrit comme ayant besoin de nettoyage ? S’agit-il d’un autre code ? Est-ce encore bien OpenWrt qui se trouve dans la Fonera+ ?

Deux solutions : attendre ou réinstaller le firmware Fon pour analyse. Mieux, analyser le firmware d’origine en attendant le support du switch.

Mise à jour : Fon à publié les sources du firmware de la Fonera+ le 14 septembre. Une archive est disponible ici : http://download.fon.com/firmware/foneraplus/latest/foneraplus.tar.bz2. Un patch existe pour le support ethernet (130-ar2313_ethernet.patch) mais il est identiques à celui livré avec les sources 7.07. Ce qui est différent, en revanche c’est le fichier target/linux/fonera-2.6/files/drivers/net/ar2313/ar2313.c. Là il semble bien s’agir du code source à nettoyer à en croire les commentaires : «FIXME: ugly, ugly hack!», «XXX: clean up this garbage!», «FIXME: does this work?». Propriétaires d’un spot Fonera+, sachez qu’il y a de drôles de choses dans la boiboite…

Fonera+ / Fonera plus – OpenWrt

Depuis quelques temps, le fon store propose un nouveau routeur : la Fonera+ (plus). Celle-ci possède comme particularité de disposer deux interfaces Ethernet. Ceci ouvre des perspectives très intéressantes comme le fait de transformer ce routeur Wifi communautaire en routeur de filtrage, IPVS, VPN, etc… Bref, une nouvelle interface Ethernet c’est que du bonheur. Mais l’OpenWrt Kamikaze 7.07 peut-il fonctionner sur la Fonera+ ? La réponse est oui, mais il reste un peu de travail. Voici les premiers essais.

Je viens tout juste de recevoir ma Fonera+. Avant même un branchement « standard » la voici démontée et inspectée.

Côté hardware on retrouve bien des choses déjà présentes dans la classique Fonera. CPU Atheros/MIPS identique, même quantité de mémoire et de Flash, chip Wifi identique… Le layout du circuit a été revu et l’alimentation se fait à présent via un bloc secteur à 7.5 Volts en lieu et place du 5 volts. Rien de fantastique.

Un coup d’oeil à la platine et on remarque un contrôleur Ethernet et deux PHY (LFE8505 de DELTA ELECTRONICS).

Côté connectique on trouve quatre broches : le connecteur série 3.3V permettant de prendre la mains sur le routeur avec un montage adéquate pour la conversion en RS232. Ca tombe bien, c’est du déjà fait. Après repérage, on obtient la connectique suivante pour ce connecteur marqué JP1 (de gauche à droite) :

Masse
RX
TX
+3.3 Volts

On branche donc l’adaptateur et on lance minicom (ou screen) pour voir ce qui se passe :
+Ethernet eth0: MAC address 00:18:84:a0:5b:98
IP: 192.168.1.1/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.254

RedBoot(tm) bootstrap and debug environment [ROMRAM]
OpenWrt certified release, version 1.1 – built 22:32:28, May 7 2007

Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.

Board: FON 2201
RAM: 0x80000000-0x81000000, [0x80040290-0x80fe1000] available
FLASH: 0xa8000000 – 0xa87f0000, 128 blocks of 0x00010000 bytes each.
== Executing boot script in 2.000 seconds – enter ^C to abort
RedBoot attend 2s pour un ^C et recevoir des directives, c’est bon signe. On attend et le chargement continu :
RedBoot> fis load -b 0x80100000 loader
RedBoot> go 0x80100000
Failsafe loader v0.2

Looking for board config data… found at offset 0xa87f0000
Reset button GPIO: 6
Reading flash from 0xa8040000 to 0xa825b989… done.
Verifying CRC… OK – 0xa7a3c6df
Uncompressing Linux… Ok, booting the kernel.
[sighandler]: No more events to be processed, quitting.
[cleanup]: Waiting for children.
[cleanup]: All children terminated.
Unlocking rootfs …
Could not open mtd device: rootfs
switching to jffs2
init started: BusyBox v1.4.1 (2007-06-08 12:11:45 UTC) multi-call binary
: ifconfig: SIOCSIFADDR: No such device

: ifconfig: SIOCSIFADDR: No such device

: udhcpc (v1.4.1) started

: route: fscanf

: Sending discover…

: Sending discover…

: Sending discover…
Catastrophe ! Pas de console série. Nous n’avons pas la main sur le routeur. Après tout, ce n’est pas grave, le firmware de Fon ne nous intéresse pas vraiment. On reset et on regarde ce que raconte RedBoot :
== Executing boot script in 2.000 seconds – enter ^C to abort
^C
RedBoot> fis list
Name FLASH addr Mem addr Length Entry point
RedBoot 0xA8000000 0x80040400 0x00030000 0xA8000000
loader 0xA8030000 0x80100000 0x00010000 0x80100000
image 0xA8040000 0x80040400 0x00230004 0x80040400
image2 0xA8660000 0xA8660000 0x00140000 0x80040400
FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000
RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000
Et puis :
RedBoot> fconfig -l -n
boot_script: true
boot_script_data:
.. fis load -b 0x80100000 loader
.. go 0x80100000

boot_script_timeout: 2
bootp: false
bootp_my_gateway_ip: 0.0.0.0
bootp_my_ip: 192.168.1.1
bootp_my_ip_mask: 255.255.255.0
bootp_server_ip: 192.168.1.254
console_baud_rate: 9600
gdb_port: 9000
info_console_force: false
net_debug: false
Le script de démarrage charge un second bootloader. Il faut y prendre garde. Nettoyons tout cela :
RedBoot> fconfig
Run script at boot: true
Boot script:
.. fis load -b 0x80100000 loader
.. go 0x80100000
Enter script, terminate with empty line
>> fis load -l vmlinux.bin.l7
>> exec
>>
Boot script timeout (1000ms resolution): 2
Use BOOTP for network configuration: false
Gateway IP address:
Local IP address: 192.168.1.1
Local IP address mask: 255.255.255.0
Default server IP address: 192.168.1.254
Console baud rate: 9600
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false
Update RedBoot non-volatile configuration – continue (y/n)?yy
Il ne reste plus qu’à charger notre OpenWrt Kamikaze 7.07 déjà compilé pour l’ancienne Fonera :
RedBoot> ip_address -l 192.168.0.12/24 -h 192.168.0.1
IP: 192.168.0.12/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.0.1
RedBoot> fis init -f
About to initialize [format] FLASH image system – continue (y/n)? y
*** Initialize FLASH Image System
… Erase from 0xa8030000-0xa87e0000: ………………………
… Erase from 0xa87e0000-0xa87f0000: .
… Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> fis list
Name FLASH addr Mem addr Length Entry point
RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000
FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000
RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000
RedBoot> load -r -b 0x80041000 openwrt-atheros-2.6-root.jffs2-64k
Using default protocol (TFTP)
Raw file loaded 0x80041000-0x801e0fff, assumed entry at 0x80041000
RedBoot> fis create -b 0x80041000 -f 0xA8030000 -l 0x006F0000 -e 0x00000000 rootfs
… Erase from 0xa8030000-0xa8720000: …………………………..
… Program from 0x80041000-0x80731000 at 0xa8030000: …………………..
… Erase from 0xa87e0000-0xa87f0000: .
… Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> load -r -b 0x80041000 openwrt-atheros-2.6-vmlinux.lzma
Using default protocol (TFTP)
Raw file loaded 0x80041000-0x80100fff, assumed entry at 0x80041000
RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
… Erase from 0xa8720000-0xa87e0000: …………
… Program from 0x80041000-0x80101000 at 0xa8720000: …………
… Erase from 0xa87e0000-0xa87f0000: .
… Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> reset
Résultat :
== Executing boot script in 2.000 seconds – enter ^C to abort
RedBoot> fis load -l vmlinux.bin.l7
Image loaded from 0x80041000-0x80290086
RedBoot> exec
Now booting linux kernel:
Base address 0x80030000 Entry 0x80041000
Cmdline :
Linux version 2.6.21.5 (denis@morgane) (gcc version 4.1.2) #9 Fri Sep 14 12:02:43 CEST 2007
CPU revision is: 00019064
Determined physical RAM map:
memory: 01000000 @ 00000000 (usable)
Initrd not found or empty – disabling initrd
Built 1 zonelists. Total pages: 4064
Kernel command line: console=ttyS0,9600 rootfstype=squashfs,jffs2 init=/etc/preinit
Primary instruction cache 16kB, physically tagged, 4-way, linesize 16 bytes.
Primary data cache 16kB, 4-way, linesize 16 bytes.
Synthesized TLB refill handler (20 instructions).
Synthesized TLB load handler fastpath (32 instructions).
Synthesized TLB store handler fastpath (32 instructions).
Synthesized TLB modify handler fastpath (31 instructions).
PID hash table entries: 64 (order: 6, 256 bytes)
Using 92.000 MHz high precision timer.
Dentry cache hash table entries: 2048 (order: 1, 8192 bytes)
Inode-cache hash table entries: 1024 (order: 0, 4096 bytes)
Memory: 13504k/16384k available (1955k kernel code, 2880k reserved,
292k data, 116k init, 0k highmem)
Mount-cache hash table entries: 512
NET: Registered protocol family 16
Radio config found at offset 0xf8(0x1f8)
Time: MIPS clocksource has been installed.
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 512 (order: 0, 4096 bytes)
TCP bind hash table entries: 512 (order: -1, 2048 bytes)
TCP: Hash tables configured (established 512 bind 512)
TCP reno registered
squashfs: version 3.0 (2006/03/15) Phillip Lougher
Registering mini_fo version $Id$
JFFS2 version 2.2. (NAND) (C) 2001-2006 Red Hat, Inc.
io scheduler noop registered
io scheduler deadline registered (default)
Serial: 8250/16550 driver $Revision: 1.90 $ 1 ports, IRQ sharing disabled
serial8250: ttyS0 at MMIO 0xb1100003 (irq = 37) is a 16550A
eth0: Dropping NETIF_F_SG since no checksum feature.
eth0: Atheros AR231x: 00:18:84:a0:5b:98, irq 4
cmdlinepart partition parsing not available
Searching for RedBoot partition table in spiflash at offset 0x7d0000
Searching for RedBoot partition table in spiflash at offset 0x7e0000
5 RedBoot partitions found on MTD device spiflash
Creating 5 MTD partitions on « spiflash »:
0x00000000-0x00030000 : « RedBoot »
0x00030000-0x00720000 : « rootfs »
0x00720000-0x007e0000 : « vmlinux.bin.l7 »
0x007e0000-0x007ef000 : « FIS directory »
0x007ef000-0x007f0000 : « RedBoot config »
nf_conntrack version 0.5.0 (128 buckets, 1024 max)
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP vegas registered
NET: Registered protocol family 1
NET: Registered protocol family 17
802.1Q VLAN Support v1.8 Ben Greear
All bugs added by David S. Miller
eth0: Configuring MAC for full duplex
jffs2_scan_eraseblock(): End of filesystem marker found at 0x180000
jffs2_build_filesystem(): unlocking the mtd device… done.
jffs2_build_filesystem(): erasing all blocks after the end marker… done.
VFS: Mounted root (jffs2 filesystem) readonly.
Freeing unused kernel memory: 116k freed
Warning: unable to open an initial console.
Algorithmics/MIPS FPU Emulator v1.5
– preinit –
– init –
init started: BusyBox v1.4.2 (2007-09-05 17:39:32 CEST) multi-call binary

Please press Enter to activate this console. device eth0 entered promiscuous mode
br-lan: port 1(eth0) entering learning state
br-lan: topology change detected, propagating
br-lan: port 1(eth0) entering forwarding state
PPP generic driver version 2.4.2
wlan: 0.8.4.2 (svn r2568)
ath_hal: module license ‘Proprietary’ taints kernel.
ath_hal: 0.9.30.13 (AR5212, AR5312, RF2316, TX_DESC_SWAP)
ath_rate_minstrel: Minstrel automatic rate control algorithm 1.2 (svn r2568)
ath_rate_minstrel: look around rate set to 10%
ath_rate_minstrel: EWMA rolloff level set to 75%
ath_rate_minstrel: max segment size in the mrr set to 6000 us
wlan: mac acl policy registered
ath_ahb: 0.9.4.5 (svn r2568)
ath_pci: switching rfkill capability off
ath_pci: switching per-packet transmit power control off
wifi0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
wifi0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps
12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
wifi0: H/W encryption support: WEP AES AES_CCM TKIP
wifi0: mac 11.0 phy 4.8 radio 7.0
wifi0: Use hw queue 1 for WME_AC_BE traffic
wifi0: Use hw queue 0 for WME_AC_BK traffic
wifi0: Use hw queue 2 for WME_AC_VI traffic
wifi0: Use hw queue 3 for WME_AC_VO traffic
wifi0: Use hw queue 8 for CAB traffic
wifi0: Use hw queue 9 for beacons
wifi0: Atheros 2315 WiSoC: mem=0xb0000000, irq=3

BusyBox v1.4.2 (2007-09-05 17:39:32 CEST) Built-in shell (ash)
Enter ‘help’ for a list of built-in commands.

_______ ________ __
| |.—–.—–.—–.| | | |.—-.| |_
| – || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
KAMIKAZE (7.07) ———————————–
* 10 oz Vodka Shake well with ice and strain
* 10 oz Triple sec mixture into 10 shot glasses.
* 10 oz lime juice Salute!
—————————————————
root@OpenWrt:/#

Ca marche ! Ou presque. Une seule interface est détectée (eth0) et il reste à regarder du côté des GPIO. Pour l’heure OpenWrt 7.07 est fonctionnel mais n’utilise pas pleinement le matériel à disposition et en particulier la seconde interface Ethernet. Il s’agit sans doute d’un problème pilote.

La suite plus tard, après quelques recherches…

Fonera i2c – pilote à jour pour Kamikaze 7.07

Le passage d’OpenWrt Kamikaze 7.06 à 7.07 apporte un grand nombre de changement dont le passage du kernel linux à la version 2.6.21.4. Le code de mon pilote i2c utilisant les GPIO du routeur La Fonera est donc mis à jour.

Le changement réside dans l’utilisation de la fonction i2c_del_adapter en lieu et place de i2c_bit_del_bus. En dehors de cela, j’ai constater un changement de comportement dans le chargement du pilote. A plusieurs reprises le chargement immédiatement après le boot ne fonctionnait pas :
i2c-algo-bit.o: (0) scl=0, sda=0
i2c-algo-bit.o: GPIO adapter seems to be busy.
Puis, après un tant d’attente de quelques minutes, les choses sont rentrées dans l’ordre :
i2c-algo-bit.o: (0) scl=128, sda=16
i2c-algo-bit.o: (1) scl=128, sda=0
i2c-algo-bit.o: (2) scl=128, sda=16
i2c-algo-bit.o: (3) scl=0, sda=16
i2c-algo-bit.o: (4) scl=128, sda=16
i2c-algo-bit.o: GPIO adapter passed test.
: hw routines registered.
I2C adapter driver [GPIO adapter] forgot to specify physical device
i2c_adapter i2c-0: adapter [GPIO adapter] registered
i2c-dev: adapter [GPIO adapter] registered as minor 0
gpio_i2c: module loaded
gpio_i2c: inverted outputs
La charge système est peut-être en cause. Je vais me pencher sur le problème au niveau logiciel (avec un udelay plus important, déjà à 600) et au niveau matériel (la présence de condensateurs et de résistances sur les GPIO forme clairement un réseau RC).

Les sources du pilotes sont là : http://www.lefinnois.net/fonerai2c/i2c-gpio-0.0.6.tar.gz

Et les paquets pour Kamikaze 7.07 sur La Fonera ici : http://www.lefinnois.net/fonerai2c/7.07/atheros-2.6/packages/

OpenWrt Kamikaze 7.07 et La Fonera : Can't locate c0000(786432) bytes free in FLASH

En voulant mettre à jour mon routeur La Fonera avec la version 7.07 d’OpenWrt Kamikaze, j’ai rencontré un problème lors du flashage via RedBoot :
Can’t locate c0000(786432) bytes free in FLASH
En d’autres termes : impossible d’allouer 786432 octets en mémoire flash. Le problème vient de la taille du noyau Linux, le fichier openwrt-atheros-2.6-vmlinux.lzma. Jusqu’à présent sa taille était de 720896 octets (0xB0000) mais, à présent, il fait 786432 (0xC0000). Il faut donc revoir les valeurs de la table des images de RedBoot.

Voici ce que nous avions jusqu’à présent :
RedBoot> fis list
Name FLASH addr Mem addr Length Entry point
RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000
rootfs 0xA8030000 0xA8030000 0x00700000 0x00000000
vmlinux.bin.l7 0xA8730000 0x80041000 0x000B0000 0x80041000
FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000
RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000
Pour gagner de la place pour le noyau, nous devons allouer moins d’espace pour le rootfs et arriver à :
RedBoot> fis list
Name FLASH addr Mem addr Length Entry point
RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000
rootfs 0xA8030000 0xA8030000 0x006F0000 0x00000000
vmlinux.bin.l7 0xA8720000 0x80041000 0x000C0000 0x80041000
FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000
RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000
Le jeu de commandes à utiliser devient donc :
load -r -b 0x80041000 openwrt-atheros-2.6-root.jffs2-64k
fis create -b 0x80041000 -f 0xA8030000 -l 0x006F0000 -e 0x00000000 rootfs
puis
load -r -b 0x80041000 openwrt-atheros-2.6-vmlinux.lzma
fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
0x006F0000 et non plus 0x00700000 ! Vous pouvez, avant cela supprimer les images existantes avec fis delete ou, plus simplement, réinitialiser le tout avec fis init -f. Ceci ne supprimera pas le bootloader et recréera un répertoire système (System directory). Notez qu’il est important de flasher l’image rootfs avant celle du noyau. En effet, on précise avec l’option -f l’emplacement de l’image en 0xA8030000. Si vous flashez le noyau en premier, cet emplacement sera déjà (dynamiquement) utilisé.

i2c pour La Fonera – le circuit

J’ai finalement décidé de faire un peu plus propre concernant le bus i2c pour le routeur La Fonera. Voici donc un typon correspondant au schéma déjà donné.

Tout est dans http://www.lefinnois.net/fonerai2c/. Source, binaires pour OpenWrt Kamikaze 7.06, schéma et typon. Le pilote i2c_gpio a été mis à jour (correction de typo, ajout du numéro de version, etc) ainsi que le paquet binaire correspondant.