Archivio mensile:marzo 2012

Creare un backup completo di Fonera 2100/2200

Nel precedente articolo vi ho parlato di come flashare un’immagine di backup su una flash memory.
Ma non vi ho detto come realizzare l’immagine di backup!!!

Benissimo, abilitiamo telnet ed ssh sulla nostra fonera.
Telnet in “Administrator”; SSH da “Services/Services” e poi in “Administrator”.

Ho notato che la password del router, però deve essere:
user: root
pass: admin

Scarichiamo “Netcat for Windows” e mettiamolo per comodità nella root del nostro pc… in C:nc
Installiamo il client telnet per windows tramite “Attivazione o disattivazione delle funzionalità di Windows“.
Colleghiamo la fonera al pc via ethernet e sconnettiamoci da eventuali reti wifi.

Apriamo due shell (start>esegui>cmd).

In una comanderemo Netcat e nell’altra comanderemo la fonera via telnet.

Nella shell che useremo per la fonera digitiamo questo:

telnet 192.168.1.1

Dove 192.168.1.1 è l’ip del router.
Inseriamo come nome utente e pass quelle citate più sù… la password è di tipo ghost: non vedremo gli asterischi.

Diamo il comando cat /proc/mtd e segnamoci dove risiede la partizione fullflash:
root@dd-wrt:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00030000 00010000 "RedBoot"
mtd1: 007a0000 00010000 "linux"
mtd2: 00560000 00010000 "rootfs"
mtd3: 00170000 00010000 "ddwrt"
mtd4: 00010000 00010000 "nvram"
mtd5: 00010000 00010000 "FIS Directory"
mtd6: 00010000 00010000 "board_config"
mtd7: 007b0000 00010000 "fullflash"

Nel mio caso è mtd7.
Questa partizione contiene i dati di tutta la flash.

Ora disabilitamo eventuali firewall e dalla shell che useremo per Netcat, entriamo nella directory di netcat e digitiamo:

nc -l -p 3333 > mtd7.bin

Si metterà in ascolto e non farà nulla.
Dalla shell di telnet digitiamo:

cat /dev/mtdblock/7 | nc 192.168.1.2 3333

Dove l’ip 192.168.1.2 è l’ip che la fonera ha assegnato al nostro pc (basta fare ipconfig per vedere che ip abbiamo ottenuto dall fonera).

Aspettiamo qualche attimo et voilà, nella cartella di Netcat abbiamo mtd7.bin !!!

Note di chiusura:
Il backup di questa fonera è unico in quanto, al suo interno, ha alcuni dati *sensibili*:
1. i MAC address (ethernet e wifi) della fonera che abbiamo backuppato
2. il seriale della propria fonera
3. dati di calibrazione della wifi

Non è detto che il backup di una fonera con hardware uguale possa funzionare in modo ottimale su un altra fonera.
Oltre a dover modificare i punti 1 e 2, il punto 3 è quello più importante ed è unico su ogni hardware.

Debrick via flashing SPI su Fonera 2100/2200

Quando tutto sembra finito, l’ultima spiaggia è il flashing via SPI.
Questo metodo è quello definitivo, dopodichè, dovete solo buttarla dalla finestra!
Da qualche parte si è menzionato che si può eseguire il flashing via SPI della nostra fonera, ma nessuno ha detto come.
Probabilmente questa sarà l’unica fonte dove illustro come effettuare il flash via spi.

Di cosa si tratta?
Tratteremo la nostra flash come una qualsiasi altro componente elettronico, lo dissalderemo e lo flasheremo con un programmatore apposito.
Questa soluzione non è pericolosa per chi ha dimestichezza, ma per chi non ha esperienza (come me), può creare molte difficoltà.

Le fasi sono queste:

1. Dissaldare la flash
2. Flashare via SPI la memoria (possibilmente nuova) con un programmatore apposito
3. Saldatura

Fase 1:
La nostra flash si trova nella parte sottostante della fonera e spesso ha un etichetta con il numero di serie dell’ultimo firmware fon originale installato.

258736834_e8ed2aa508_o

Ma come dissaldarla senza fare danni come questi (opera mia)?:

IMG_20120308_201016

Ci sono due metodi per fare un servizio pulito:

1. Saldatore ad aria calda, la miglior soluzione: facile, pulito ed indolore
2. ChipQuick
3. Filo di rame passante

Metodo 1:

ChipQuick è un prodotto molto simile allo stagno, si scioglie a basse temperature e si comporta, per certi versi, come l’olio sugli oggetti.
In pratica si appiccica alle pareti dei pin e non si solidifica, rendendo facile la rimozione dell’integrato.
Video:

Metodo 2:

E’ un metodo meno facile ma fa il suo lavoro:
1. Stagneremo nuovamente tutti i pin
2. rimuoveremo gli eccessi con una garza ramata o una pomepetta
3. passeremo un filo di rame sotto la giuntura tra i pin e l’integrato
4. riscalderemo i pin uno ad uno e tireremo il filo di rame sotto i pin in modo tale da staccarli dalle piazzole

Fase 2:
Dopo aver acquistato una memoria nuova (possibilmente uguale alla vecchia) non ci resta altro che riflasharla con un programmatore apposito.
In giro su ebay ce ne sono una cifra!
Ognuno di essi flasha una certa famiglia di memorie e ognuno di essi ha un proprio software per la programmazione.
Tra le tante cinesate e dubbi programmatori io vi consiglio:

1. EZP2010 -> ~30€
2. MiniPro (consigliatissimo!) -> ~50€ http://www.autoelectric.cn/minipro

Cercateli su ebay.

Procuratevi anche un adattatore SOP16 to DIP16 in modo tale da facilitare l’innesto della memoria flash sul programmatore.
Fatto ciò, dovrete usare il software che il cinese di fiducia vi ha dato assieme al programmatore.
I movimenti, grosso modo (dipende dal programmatore) sono sempre gli stessi:

1. Installate eventuali driver
2. Collegate la memoria nell’adattatore che andrà a sua volta nel pettine a leva del programmatore
3. Fate riconoscere la memoria dal software del programmatore

Esempio con MiniPro:

Immagine

4. Caricate un immagine della flash di un intera fonera funzionante [Nota a fine articolo].
5. Flashate

capture

Di solito, nel software di corredo c’è anche la funzione “Compare”/”Verify”.
Usatela per verificare se effettivamente RedBoot è stato installato correttamente confrontando ciò che avete scritto sulla memoria con il file redboot.bin che avete sul pc.

Fase 3:
Risaldare il tutto.
Se siete sicuri che la fase 1 e la fase 2 è andata a buon fine, il grosso ormai è fatto.
I metodi per risaldare smd sono moltissimi e sono molto più facili dei metodi per dissaldare.
Usate flussante di qualità, mano ferma, punta del saldatore non troppo alta e saldate il tutto.

Date alimentazione alla fonera e pregate S. WiFi!

Nota:
Bisogna avere l’immagine di un backup di una fonera con hardware uguale a quella che bisogna debrickare.
In quanto, nella parte finale della flash, oltre al template board config ci sono alcuni dati circa la calibrazione della scheda wifi.
E non è detto che l’immagine che create da una fonera funzionante funzioni anche su quella da debrickare…
Potreste ottenere errori di checksum e una wifi non ottimizzata.

Debrick via JTAG su fonera 2100/2200

Questo tipo di debrick è proprio un dito nell’ano…
E’ durato parecchio e sulla mia fonera, purtroppo, non ha funzionato.
Quando la seriale non risponde è l’unica soluzione che risolve al 98% dei casi il brick della nostra amatissima fonera.
Se riuscite a debrickarla in questo modo, non vi resta che aggiustare le ultime cose via seriale in quanto con questo metodo vi illustro come rimettere il solo RedBoot. Ok?

Di cosa abbiamo bisogno?
1. Porta parallela LPT (quella vecchia della stampante):

lg_lw60_case_lpt

2. Abbiamo bisogno di un programma chiamato tjtag scaricabile dopo una piccola donazione dal sito:  tjtag.com
Se volete fare solo delle *prove* io l’ho trovato versioni ancora free di questo programma: Lista tjtag [merlino60]
La più recente in versione free è la: tjtag-3.0.2-RC2
Con questo software, andremo a debrickare non solo la fonera, ma moltissimi altri router: ricordatevelo.

Realizzate un cavo (non troppo lungo) con 4 resistenze da 100Ohm chiamato wiggler cable: Costruzione Cavo DLC5 (Wiggler) unbuffered

Ora dovremo collegare la nostra fonera al cavo jtag in questo modo:

Jtag-schematic

Nota: notare la resistenza da 100Ohm tra vcc e il pin di test

Pinout fonera:

4-FONERA_2200A_JTAG_v2.6
3-FONERA_2200A_BOARD_JTAG

Nota: il pinout della fonera 2100 è identico a quello della 2200 in quanto entrambe usano il pinout standard jtag 2.6

Dovreste ottenere una cosa del genere, a me non è venuta molto bene:

dscn0392u

Ora lanciamo il servizio che ci permetterà di usare la porta lpt:

1. Unzippate questo pack: giveio.zip
2. Start > Esegui > cmd
3. Entrate nella directory del pack
4. loaddrv
5. date il path della dll giveio.sys
6. Install, start
Dovreste avere una cosa del genere:

giveio_status

Date alimentazione alla fonera.

Ora andate nel folder di tjtag sempre dal prompt dei comandi.
E date un bel -probeonly
Dovrebbe apparirvi una cosa del genere:

Probeoonly

Se si blocca in resuming cpu… premete CTRL + C
Se vi appaiono tutti 11111111111…1 CPU ID, significa che tjtag non ha riconosciuto la cpu e quasi sicuramente è un problema di wiring
Se il probe non dovesse andar a buon fine inserite anche questi switch /noemw /noreset

Se è andato tutto ok non ci resta che:

1. Cancellare tutta la flash
2. Ricaricare RedBot
3. Caricare la tabella di configurazione come partizione nascosta

Punto 1: flash erasing
tjtag3 -erase:custom /window:a8000000 /start:a8000000 /length:30000
oppure (sconsigliato)
tjtag3 -erase:wholeflash

Il primo comando cancella solo la partizione di RedBoot, infatti il lenght è proprio 30000 (il lenght tipico di RedBoot)
Il secondo (sconsigliato) è più invasivo in quanto cancella tutta la flash.

Punto 2: flashing RedBoot
Scaricate dal sito di dd-wrt la versione GIUSTA per la vostra fonera di RedBoot, rinominatela in custom.bin e inseritela nella directory di tjtag.
Date questo comando:
tjtag3 -flash:custom /window:a8000000 /start:a8000000 /length:30000

Flashiamo dall’indrizzo a8000000 per un leght di 30000 il file custom.bin
L’operazione è molto lunga, quindi aspettate con pazienza.

Punto 3: modifica e upload della tabella di configurazione
Scaricate ed installate un qualsiasi HEX Editor, ad esempio: XVI32
Io vi sconsiglio di effettuare questa operazione in quanto potreste rischiare di incorrere in problemi di calcolo del checksum.
Scaricate il file board_config_template.bin dal sito di Matteo Cicutin:  board_config_template.bin
Aprite il file board board_config_template.bin con XVI32 e andate alla riga 60:

capture
Ed inserite il MAC Address della vostra fonera (presente nell’etichetta incollata sul retro) al posto delle caselle:
00 11 22 33 44 55
Esempio:
00 11 22 33 44 55 diventa [esempio] -> 00 28 ae 87 fd f2
Questo rappresenta il MAC della scheda Ethernet della fonera.
Di seguito ci sarà un altro blocco, fate la stessa cosa ma incrementate l’ultima coppia di 1 rispetto al MAC dell’ethernet. Questo sarà il MAC della scheda wireless.
Esempio:
00 11 22 33 44 56 diventa [esempio] -> 00 28 ae 87 fd f3

capture

Ora, salvate il file e rinominatelo in custom.bin date a tjtag il comando per l’upload del file:
tjtag3 -flash:custom /window:a87f0000 /start:a87f0000 /length:10000

Benissimo, è finita!
Riavviate il tutto e caricate dalla seriale dd-wrt (seguite l’altra mia guida!).

Alcune note di chiusura:
Questo metodo non è molto documentato, il mio è stato un lavoro di ricerca e traduzione del sito ufficiale dd-wrt.com e del loro forum.

La fonte principale è:  http://www.matteocicuttin.it/

Nel caso in cui tjtag non dovesse funzionare nel modo giusto, aggiungete gli switch su ogni comando: /noemw /noreset

Se usate una versione maggiore-uguale della versione 3.0.2 di tjtag, aggiungete lo switch su ogni comando: /cable:dlc5

Nel caso in cui la cosa non dovesse andare a buon fine non vi resta che contattare mr. Tornado passandogli, però, un dump della flash aggiungedo il seguente switch al comando: tjtag3 -probeonly /flash_debug
Oppure (per versioni superiori alla 3.0.2): tjtag3 -probeonly /byte_mode /cable:dlc5

Debrick via FonFlash su Fonera 2100/2200

Questo è il metodo più banale per il debrick o aggiornamento della propria fonera.
Esegue, grosso modo, gli stessi comandi dati sulla seriale ma in completa autonomia e attraverso il cavo rj45.

1. Scaricate ed installate la libreria WinCap: http://www.winpcap.org/install/default.htm
2. Scaricate FonFlash da: http://www.gargoyle-router.com/download.php
capture
3. Scarichiamo la versione più recente di dd-wrt per la nostra fonera
4. Riavviamo il pc per consentire la corretta installazione di WinCap

Colleghiamo la fonera al computer via ethernet, ma NON diamo ancora alimentazione.

Da FonFlash

1. Select Firmware Type: -> DD-WRT
2. Select Network Interface: -> la propria scheda ethernet connessa alla fonera
3. Select Firmware Type: -> Diamo il path dell’immagine dd-wrt linux.bin
4. Cliccate su Flash Router Now!
6. No packet… – fregatevene
5. Diamo alimentazione alla fonera… flashing.

Attendiamo alcuni minuti et voilà!
Fonera con firmware DD-WRT

Debrick via SERIALE su Fonera 2100/2200

In un mio precedente articolo vi ho illustrato come realizzare il wiring della fonera 2100/2200 con un convertitore seriale rs232.
Oggi vi parlerò di come effettuare il debrick, via seriale, tramite comandi RedBoot.

Adessi vi linko l’articolo che ho scritto su come realizzare il wiring via seriale sulla vostra fonera: wiring su seriale

Scarichiamo la giusta versione dd-wrt per le nostre fonera, in particolare scaricate quella raccomandata la build 14986, ovviamente prendete la versione “console”.

Scaricate ed installate tftp: http://tftpd32.jounin.net/
Questo software permetterà di poter uploaddare dal proprio pc alla fonera il file .bin dd-wrt appena scaricato.

Dunque, disconnettetevi da qualsiasi rete wifi, staccate il vostro cavo ethernet e collegatelo alla fonera.
Nelle proprietà della scheda di rete, impostate un ip statico (ad esempio):
Ip Statico: 192.168.1.166
Subnet: 255.255.255.0
Gateway: 192.168.1.1
DNS: 192.168.1.1
Convalida all’uscita SI
Sicuramente vi farà tipo errore o qualcosa del genere, fregatevene e fate ok ok ok avanti avanti 🙂

Ora tftp deve essere configurato così:

1. Inserire il file bin nella cartella di tftp

2. Collegate il cavo rj45 alla fonera

3. Dovrebbe apparirvi su “Server Interface” di tftp l’indirizzo: 192.168.1.166

4. Se il punto 3 non si verifica, andate in settings > DHCP ed impostate gli stessi valori che avete impostato nella vostra scheda di rete.

Una volta realizzato ciò (e aver installato i driver del proprio convertitore seriale) dobbiamo metterci in comunicazione con la nostra fonera.
Scarichiamo ed installiamo PuTTY: PuTTY

Ora apriamo la comunicazione seriale, avendo premura di:

1. Settare il giusto baudrate, per molte versioni di RedBoot quello di default è 9600 per altre è 115200.
Se vi troverete a leggere caratteri strani cambiare il baud rate.

capture

2. Selezionare la giusta porta COM; nel mio caso è la 5, dipenderà dal vostro dispositivo su che COM è installato.

Una volta aperta la console, date alimentazione alla nostra fonera e vi apparirà per magia una cosa del genere:

+PHY ID is 00xx:xxxx
Ethernet eth0: MAC address xx:xx:xx:xx:xx:xx
IP: 0.0.0.0/255.255.255.255, Gateway: 0.0.0.0
Default server: 0.0.0.0

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 1.000 seconds - enter ^C to abort

Premete subito CTRL + C in modo tale da ottenere il prompt dei comandi.

RedBoot>

Una volta dentro è fatta.

Diamo questo comando: ip_address -l 192.168.1.254/24 -h 192.168.1.166
In modo tale da poter comunicare con tftp

Diamo subito il comando: fis init
E otteniamo questo:
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: .

Diamo il comando: load -r -b 0x80041000 linux.bin
Questo caricherà tramite tftp l’immagine linux.bin presente nella cartella tftp.
Se ci saranno errori dovrete rivedere la configurazione di rete e le impostazioni di tftp.
Otterrete una cosa del generE:
Using default protocol (TFTP)
Raw file loaded 0x80041000-0x80662fff, assumed entry at 0x80041000

Bene… l’ultimo comando, quello di flashing: fis create linux
Ora non toccate nulla e aspettate diversi minuti: il flashing è lungo!
Output:
... Erase from 0xa8030000-0xa8652000: ...................................................................................................
... Program from 0x80041000-0x80663000 at 0xa8030000: ...................................................................................................
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

Il grosso è finito.
L’ultima finezza è quella di aggiustare lo script di booting.
Diamo il comando: fconfig
Ed aggiustiamo lo script in questo modo:
Run script at boot: true
Boot script:
.. fis load -l vmlinux.bin.l7
.. exec
Enter script, terminate with empty line
>> fis load -l linux
>> exec
>>
Boot script timeout (1000ms resolution): 10
Use BOOTP for network configuration: false
Gateway IP address:
Local IP address: 192.168.1.254
Local IP address mask: 255.255.255.0
Default server IP address:
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: .

Date: reset
Ed è finito!!!

Riassumendo, i comandi sono in tutto 4:

1. fis init
2. load -r -b 0x80041000 linux.bin
3. fis create linux
4. fconfig (opzionale)

Potreste, però, trovarvi tra le mani una fonera con firmwre originale fon, dovrete seguire la prima parte di questa guida: http://www.dd-wrt.com/wiki/index.php/La_Fonera_Flashing

Debrick Fonera? Metodi per resuscitarla…

Molti sono i motivi per un debrick: può capitare di installare male una versione di dd-wrt, salta la corrente, un collegamento può uscire fuori, diamo comandi sbagliati etc etc
E senza troppi ringraziamenti ci ritroveremo tra le mani un bel ferma carte.

Oggi vi illustro sommariamente quali sono i metodi più diffusi per il debrick delle fonera.

1. via FonFlash
2. via seriale
3. via jtag
4. desoldering, flashing via spi & soldering

Più si va avanti e più la cosa si fa seria… io li ho provati tutti e 4 su una fonera 2200.
Non vi racconto come sono arrivato al punto 4, ma vi racconto (a grosse linee) di cosa si parla per ciascun punto.

Punto 1: Via FonFlash
Esistono alcuni software che riescono a debrickare la fonera via ethernet senza neanche smontarla.
Il più blasonato è fonflash: FonFlash
Questo permette di flashare la nostra fonera in modo molto semplice senza troppi casini.
In pratica, darà gli stessi comandi del punto 2 ma in maniera autonoma.

Punto 2: Via Seriale
Questo è quello più apprezzato.
Se non avete brickato RedBoot potete entrare nei prompt dei comandi del bootloader della fonera e fare ciò che vi pare in stile “MS-Dos”.
Cancellerete le aree di memoria, uploadderete nuove immagini dd-wrt via tftp e potrete configurare manualmente alcune impostazioni di booting (vedi: fconfig).
Non solo… con questo comando potrete aggiornare anche RedBoot.
Ma ve lo sconsiglio fortemente, perchè se aggiornate male RedBoot passerete direttamente al punto 3 🙂
Il wiki di riferimento è questo: http://www.dd-wrt.com/wiki/index.php/LaFonera_Software_Flashing

Punto 3: Via JTAG
Qui le cose si complicano ancora di più.
Esiste un software scritto in linea di comando da un certo Tornato del forum dd-wrt.com.
Questo software si chiama tjtag e lo potete scaricare donando almeno 5$ al creatore: tjtag.com
In sintesi, tramite cavo dlc5/wiggler, vi interfaccerete sul pettinte jtag presente sulla vostra fonera (non più la seriale!).
E, se sarete fortunati, potete: arare tutta la memoria e flashare RedBoot (e non dd-wrt).
In questo modo potete andare al punto 2 e aggiustare la situazione.
Ma, tjtag con me ha fatto cilecca: non mi ha riconsciuto la memoria flash dove risiede il bootloader e dd-wrt, più precisamente la memoria era una: MX25L6405

Punto 4: Desoldering, flashing, soldering.
Questo è il metodo definitivo, dissalderete la memoria e la riprogrammerete con un programmatore SPI esterno.
Per ora l’ho solo dissaldata (e male) e sto attendendo dalla Cina una memoria nuova, il programmatore e l’adattatore.

Di ognuno di questi punti, scriverò (nel tempo) un articolo di approfondimento.

A presto