Flashing della Fonera

E' possibile caricare nella Fonera un firmware alternativo (a quello FON) utilizzando RedBoot, il bootloader che avvia il sistema.
RedBoot può essere usato sia via seriale che tramite telnet. Normalmente l'accesso telnet è disabilitato1), quindi per attivarlo in ogni caso occorre un adattatore seriale almeno per la prima una volta.

In verità ci sarebbe un modo per non usare affatto la seriale ma il solo accesso SSH, come spiegato sul wiki di dd-wrt. Tuttavia ritengo che sia un po' rischioso (in ogni caso al massimo se inchiodate la Fonera vi costruire l'adattatore seriale ed amen…)

:!::!::!: Attenzione: OpenWrt Kamikaze è ad uno stadio di sviluppo da addetti ai lavori, in particolare l'interfaccia di configurazione web al momento è inutilizzabile; dd-wrt, invece funziona perfettamente!

Collegare la seriale

Vedere la sezione Collegare la seriale alla Fonera.
In ogni caso prima alimentare la Fonera e dopo almeno 3-4 secondi collegare la seriale, in caso contrario la Fonera potrebbe non partire affatto.
Tenete conto che RedBoot (il bootloader) ed il firmware potrebbero usare due velocità diverse per la seriale; mentre RedBoot usa per default una velocità di 9600, dd-wrt usa 115200: quindi se ad un tratto non vedete più nulla o vedete solo simboli strani, è segno che la velocità di connessione è sbagliata.
All'accezione viene inviato sulla seriale quanto segue:

+PHY ID is 00xx:xxxx
Ethernet eth0: MAC address 00:18:xx:xx:xx:xx
IP: 192.168.1.60/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.3

RedBoot(tm) bootstrap and debug environment [ROMRAM]
Non-certified release, version v1.3.0 - built 16:57:58, Aug  7 2006

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

Board: ap51
RAM: 0x80000000-0x81000000, [0x80040450-0x80fe1000] available
FLASH: 0xa8000000 - 0xa87f0000, 128 blocks of 0x00010000 bytes each.
== Executing boot script in 6.000 seconds - enter ^C to abort
 

Attivazione dell'accesso Telnet

Controindicazioni: durante le operazioni di riprogrammazione della flash, che durano in totale una trentina di minuti, potreste non avere feedback dell'avanzamento dell'operazione, cosa che invece con la seriale avrete sempre.

Al prompt di RedBoot digitare il comando fconfig:

RedBoot> fconfig

Verranno chiesti a questo punto i vari parametri di configurazione:

Run script at boot: true
Boot script:
.. fis load -l vmlinux.bin.l7
.. exec
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.1.1
Local IP address mask: 255.255.255.0
Default server IP address: 192.168.1.2
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
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot>

Alla richiesta 'Enter script, terminate with empty line', per DD-WRT v23 o v24 beta scrivete le due righe seguenti, seguite da una riga vuota:

fis load -l vmlinux.bin.l7
exec

Per DD-WRT v24 final invece scrivete le due righe seguenti:

fis load -l linux
exec

Come timeout impostate una decina di secondi (il default è 1)
Al posto di 192.168.1.1 e 192.168.1.2, se necessario, sostituite rispettivamente l'IP da assegnare alla Fonera durante il BOOT e l'IP del server TFTP di default; non dimenticate di impostare la netmask a 255.255.255.0.

In questo modo al riavvio RedBoot attenderà sulla porta 9000 (a meno che non scegliate di cambiarla) per 10 secondi prima di effettuare il boot del sistema operativo. Per fermare il boot è necessario inviare il carattere ^C2).

Alcuni programmi di telnet non sono in grado di inviare il carattere ^C3) così come lo va trovando RedBoot; in tal caso sotto Windows provate con Putty.
Sotto Linux provare la sequenza di comandi:

echo -e '\0377\0364\0377\0375\0006' > break
nc -vvv 192.168.1.254 9000 < break ; telnet 192.168.1.254 9000

nc invierà la sequenza corretta che fermerà RedBoot. Dopo aver eseguito la seconda riga premete ^C per ammazzare nc, in questo modo verrà eseguito telnet: non vi resta ora che premete invio per far uscire il prompt di RedBoot.

Telnet in RedBoot senza usare la seriale

Esiste un sistema per attivare il telnet senza usare la serale, per ilq uale occorre il solo accesso SSH.
In effetti dopo aver attivato l'accesso SSH si deve effettuare il flash con un kernel modificato. Tale kernel permette di modificare la configurazione di RedBoot (normalmente impossibile se non da RedBoot stesso), in modo tale da attivare l'accesso Telnet.

Trovate le istruzioni sul wiki di dd-wrt (in inglese) su come attivare l'accesso telnet a RedBoot senza usare il cavo seriale, ma il solo hack SSH.
Inoltre sul wiki di ninux.org c'è una guida completa sul flashing della Fonera (in italiano).

Mirror locale Kernel CAMICIA: openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma
Mirror locale settings RedBoot: out.hex

Metodi di upload del firmware

Il firmware può essere scaricato sulla Fonera tramite un server HTTP, un server TFTP oppure direttamente via seriale col protocollo XModem.
Il metodo XModem è da escludere a priori, perché già l'operazione di flashing è molto lenta: se ci aggiungiamo la lentezza della seriale stiamo apposto. Il metodo HTTP è comodo solo se avete già a disposizione un server HTTP, altrimenti il TFTP è molto più semplice.

Come server TFTP in In Windows è possibile usare tftpd32, mentre in molte distribuzioni Linux tftpd è spesso già installato, anche se inattivo.

La configurazione di tftpd32 è molto semplice:

  1. copiate il file tftpd32.exe in una cartella, ad esempio c:\temp\tftp
  2. create la cartella tftproot, in cui copierete tutti i file che il server dovrà inviare
  3. copiate i settings esattamente come stanno nella schermata che segue

tftp32 config

Nella cartella tftproot si devono mettere i file del firmware. Con DD-WRT v23 e v24 beta sono due: il kernel Linux e l'immagine del filesyste, vmlinux.bin.l7 e root.fs. In tal caso l'immagine del filesystem va caricata nella “partizione” rootfs mentre il kernel nella partizione vmlinux.bin.l7.
Con DD-WRT v24 final il file del firmware è unico e si chiama linux.bin. In tal caso il file va caricato nella “partizione” unica chiamata linux.

Installazione del nuovo Firmware

I comandi da eseguire per caricare il nuovo firmware sono sempre gli stessi, tuttavia possono cambiare leggermente alcuni parametri. Per dd-wrt v23 e v24 beta ad esempio i comandi suggeriti sono:

fis init
load -r -v -b 0x80041000 root.fs
fis create -b 0x80041000 -f 0xA8030000 -l 0x002C0000 -e 0x00000000 rootfs
load -r -v -b 0x80041000 vmlinux.bin.l7
fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
fis create -f 0xA83D0000 -l 0x00010000 -n nvram

Per DD-WRT v24 final:

fis init -f
load -r -v -b 0x80041000 linux.bin
fis create linux

NOTA: se usate il protocollo HTTP ai 2 comandi 'load' aggiungere il parametro '-m HTTP'; invece per il metodo XModem al posto del nome del file mettete il parametro '-m xmodem': appena avviate un load verrà stampato il carattere 'C' e dovrete inviare il file col protocollo xmodem.

NOTA 2: quando si installa il firmware su un apparecchio già utilizzato con versioni precedente è opportuno cancellare prima tutta la flash, per fare questo aggiungere il parametro -f utilizzando il comando fis init -f. Per fare un esempio: installando DD-WRT v.24 finale su una flash dove vi era una precedente release il sistema non funzionava bene. Ciò perché quando si caricano i dati sulla flash viene sovrascritto il contenuto precedente fino alla fine del codice, il resto rimane come prima. DD-WRT registra le impostazioni proprio nella parte finale libera della flash, installando la nuova versione rimangono le vecchie impostazioni e non essendo compatibili incasinano tutto il sistema. Utilizzando fis init -f oltre a inizializzare la flash se ne cancella il contenuto (tranne la parte che contiene il boot) e tutto funziona regolarmente.

I comandi danno luogo al seguente output:

RedBoot> fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
... Erase from 0xa83e0000-0xa83f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa83e0000: .

load -r -v -b 0x80041000 root.fs
Using default protocol (TFTP)
Raw file loaded 0x80041000-0x802e3fff, assumed entry at 0x80041000
RedBoot> fis create -b 0x80041000 -f 0xA8030000 -l 0x002C0000 -e 0x00000000 rootfs
... Erase from 0xa8030000-0xa82f0000: ............................................
... Program from 0x80041000-0x80301000 at 0xa8030000: ............................................
... Erase from 0xa83e0000-0xa83f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa83e0000: .

RedBoot> load -r -v -b 0x80041000 vmlinux.bin.l7
Using default protocol (TFTP)
Raw file loaded 0x80041000-0x80120fff, assumed entry at 0x80041000

RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
... Erase from 0xa82f0000-0xa83d0000: ..............
... Program from 0x80041000-0x80121000 at 0xa82f0000: ..............
... Erase from 0xa83e0000-0xa83f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa83e0000: .

RedBoot> fis create -f 0xA83D0000 -l 0x00010000 -n nvram
... Erase from 0xa83e0000-0xa83f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa83e0000: .
RedBoot> reset

Occhio che ogni comando create impiega fino a 15-20 minuti per essere completato (curioso, perché alla fine si tratta di scrivere un file di 3 o 6 mega). Se siete collegati in telnet disabilitate ogni funzione di standby perché se cade la connessione non so proprio come si comporta RedBoot mentre sta scrivendo il firmware :-)

Per OpenWrt invece i file generalmente si chiamano 'openwrt-atheros-2.6-vmlinux.lzma' e 'openwrt-atheros-2.6-root.jffs2-64k'.

Caricamento del kernel in memoria:

lo -r -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma

che da luogo al seguente output:

Using default protocol (TFTP)
Raw file loaded 0x80040800-0x800f07ff, assumed entry at 0x80040800

Scrittura del kernel nella flash:

fi cr -e 0x80041000 -r 0x80041000 vmlinux.bin.l7

che da luogo al seguente output:

... Erase from 0xa8030000-0xa80e0000: ...........
... Program from 0x80040800-0x800f0800 at 0xa8030000: ...........
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

Caricamento del filesystem in memoria:

lo -r -b %{FREEMEMLO} openwrt-atheros-2.6-root.squashfs

Lettura della memoria rimasta libera:

fis free

che da luogo al seguente output:

0xA80E0000 .. 0xA87E0000

Adesso con un po' di matematica in esadecimale: A87E0000 - A80E0000 = 00700000

Scrittura del filesystemnella flash, sostiuire 0xCHANGEME col valore ottenuto sopra (nel nostro caso 00700000):

fi cr -l 0xCHANGEME rootfs

che da luogo al seguente output:

... Erase from 0xa80e0000-0xa87e0000: ................................................................................................................
... Program from 0x80040800-0x80160800 at 0xa80e0000: ..................
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

Dove reperire i firmware

Per quanto riguarda dd-wrt ci sono delle build specifiche per la Fonera, ormai giunte alla release stabile v24:
dd-wrt v24 Fonera

Per OpenWrt Kamikaze non ci sono ancora build ufficiali, secondo loro ogniuno dovrebbe compilare il fimrware per conto proprio. Non è un'operazione complicatissima, perché fondamentalmente è tutto automatizzato. Solo che occorre avere una macchina Linux/Unix (cygwin al momento non è supportato) e molta pazienza perché potrebbe impiegare ore per scaricare e compilare il tutto. Per i dettagli vedere il sito OpenWrt.
Una build non ufficiale di OpenWrt, si trova qui:
Filesystem, Kernel, Packages

Come lettura interessante segnaliamo il tutorial su Ninux.org: La Fonera dalla scatola a OpenWrt.

References

1) perché non è stato assegnato un indirizzo IP a RedBoot
2) , 3) CTRL-C
 
hack/fonera/flashing.txt · Ultima modifica: 2009/07/04 12:52 (modifica esterna)
 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Web Page Rank Icon
(C) 2003-2007 Giuseppe 'b.loved' Amato, Paipai Networks, Napoliwireless.net. E' vietata qualsiasi riproduzione di qualsiasi parte di questo sito se non si dispone dell'autorizzazione degli autori. Per contatti: paipai - chiocciola - tiscali punto it