Mini guida riassuntiva per riflashare il telefono VOIP Perfectone IP301 via JTAG
di Franklin Nell'Ano Roosevelt
Questa guida e' brutale e riscritta. Serve a SBRINDELLARE il telefono PERFECTONE IP301, nel malaugurato caso che vi si guastasse: in tal caso riflasharlo e' molto utile.
Il Perfectone lo si puo' acquistare sul sito della PERFECTONE: http://www.perfectone.net
Sito che forse non esiste piu'─ E MENO MALE
Ho provato tutti i metodi descritti in rete, almeno dalle poche info che ci sono in giro. Nessuno mi ha funzionato. L'unica e' flasharlo per intero via JTAG. E' una rottura di palle, ma alla fine funziona!
Foto del telefono aperto
Hardware necessario
- Telefono PERFECTONE IP-301
- pc con porta parallela.
- cavo jtag autocostruito (unbuffered Cable, Xilinx DLC5 Cable III). vedi qui:
http://oldwiki.openwrt.org/OpenWrtDocs(2f)Customizing(2f)Hardware(2f)JTAG_Cable.html (per fare il cavo: Un connettore CANNON 25 pin maschio con contatti placcati oro, cavetto sottile di buona qualita', facoltative: 4 resistenze da 100 ohm)
Software necessario
- pc con sistema GNU/Linux (per comodita' ho utilizzato Ubuntu).
- tjtag
Files
IP301_070105.rom Use this.
IP301_0810170.rom This gave me some problems.
cm5000.pdf The CPU schematics.
tjtagv2-1-4_for_Lexra_LX4380_CPU_20090122.zip tjtag I used for this hack.
Links
Operazioni pratiche hardware da effettuare con un saldatore adeguato (microstilo)
Assemblaggio del cavo JTAG: collegare il cavo jtag (5 fili) al connettore jp10 dell' ip301 secondo questo schema:
Codice:
LPT------------JP10 2<----100ohm--->3 (DATA0) 3<----100ohm--->9 (DATA1) 4<----100ohm--->7 (DATA2) 13<---100ohm--->5 (SELECT) 17-25<--------->2 (GND)
L'ordine delle piazzole del JP10 e' indicato da una serigrafia bianca vicino al piedino 1 (che e' quadrato): le piazzole 2-4-6-8-10-12 sono tutte gnd. Se avete dei dubbi controllate con un tester. Un particolare del connettore JP10 qui:
http://www.flickr.com/photos/32180926@N02/3063753427/
Per le resistenze si possono utilizzare quelle da 1/4w o da 1/2w, non ha importanza, la cosa fondamentale e che i fili non siano piu' lunghi di 8 centimetri. Il che equivale a far penzolare il telefono dalla parallela del pc. Io le resistenze NON LE HO USATE.
Qualsiasi problema possiate avere e' dovuto al connettore/cavo jtag... sappiate che io ne ho avuti di assurdi. Alla fine ho usato cavetti saldati direttamente sul telefono, niente resistenze, e connettore cannon 25 pin con contatti IN ORO.
Backup della flash
Da root:
./tjtag -backup:wholeflash
Per flashare il telefono
Da root:
Ricordiamoci nuovamente di disattivare il demone lp:
rmmod lp
Meglio se ammazzate anche CUPS.
Per flashare il nuovo firmware: Rinominate il firmware come WHOLEFLASH.BIN e dopo date:
./tjtagv2 -flash:wholeflash
Poi accendete il telefono: se tutto e' ok, apparira il POST ed il telefono partira'.
Per accedere all'interfaccia di configurazione:
http://indirizzo.ip:9999, user admin, pw 24234880
ED IL GIOCO E' FATTO!
Vecchia guida CHE NON FUNZIONA, CAZZI VOSTRI
Guida tratta da vecchi post in rete, ora scomparsi/incompleti
N.B: Ho utilizzato linux per comodita', in quanto tjtag e' gia compilato ed e' possibile utilizzare una distro live avendo l'accortezza di scaricare i file necessari su pendrive.
Hardware necessario:
- ip301 (qualsiasi versione bloccata)
- pc con porta seriale e porta parallela.
- cavo jtag autocostruito (unbuffered Cable, Xilinx DLC5 Cable III). vedi qui:
- cavo seriale con adattatore di livelli rs232-ttl per il collegamento seriale. Io ho utilizzato il cavo seriale per collegare il pc ad una vecchia agenda della casio.
Lo schema per la realizzazione dell'adattatore di livelli rs232-ttl a componenti discreti e' questo: http://picprojects.org.uk/projects/simpleSIO/ssio.htm
Lo schema con integrato max si puo trovare qui: http://www.compsys1.com/workbench/On_top_of_the_Bench/Max233_Adapter/max233_adapter.html Su ebay si trovano gia montati: basta cercare rs232-ttl.
Software necessario:
- pc con windows e linux installati (per comodita' ho utilizzato ubuntu).
- tjtag modificato da roleo (grazie ancora):
notare anche http://roleo.dyndns.org/public/varie/doc/jtag.html
Attenzione nuova versione di tjtag: Citazione di: roleo Ho messo le label per definire le aree di memoria, per cui ora si può leggere e scrivere senza usare custom.
Queste le label:
BOOTLOADER FCODEC IC VOIP X Y SETTINGS WHOLEFLASH
Le label X e Y non so cosa contengono per cui l'indirizzo di start e la lunghezza potrebbero non essere corretti. Anche su SETTINGS ho qualche dubbio.
Ho disattivato il parametro /nodma perché non sono riuscito a farlo funzionare pienamente in PrAcc mode, tanto non serve.
Ecco un comando di esempio per leggere ic.gz:
# tjtagv2-1-4.exe -backup:ic
Altra roba necessaria:
- un editor esadecimale per editare ic...... (io ho utilizzato
winhex http://www.x-ways.net/winhex.zip)
- putty (per gestire il collegamento seriale):
- server tftp per effettuare il caricamento del firmware via seriale (TFTPD32 : a opensource TFTP server/service for windows : TFTP
server)
-1- Operazioni pratiche hardware da effettuare con un saldatore adeguato (microstilo):
Assemblaggio del cavo JTAG: collegare il cavo jtag (5 fili) al connettore jp10 dell' ip301 secondo questo schema:
Codice:
LPT------------JP10 2<----100ohm--->3 (DATA0) 3<----100ohm--->9 (DATA1) 4<----100ohm--->7 (DATA2) 13<---100ohm--->5 (SELECT) 17-25<--------->2 (GND)
L'ordine delle piazzole del JP10 e' indicato da una serigrafia bianca vicino al piedino 1 (che e' quadrato): le piazzole 2-4-6-8-10-12 sono tutte gnd. Se avete dei dubbi controllate con un tester. Un particolare del connettore JP10 qui:
http://www.flickr.com/photos/32180926@N02/3063753427/
Per le resistenze si possono utilizzare quelle da 1/4w o da 1/2w, non ha importanza, la cosa fondamentale e che i fili non siano piu' lunghi di 15-20 centimetri.
NOTA: ho avuto un MARE DI PROBLEMI col cavo qui descritto. Sono riuscito a farlo funzionare solo senza resistenze, con cavetti di qualita', e con connettore cannon placcato oro, mantenendo i fili piu' corti di 10 cm. Ma soprattutto BESTEMMIANDO TANTISSIMO!
Collegare il cavo seriale+adattatore di livelli al connettore jp2 (3 fili) dell'ip301 (qui la guida: Accedi)
-2- Operazioni preliminari per l'utilizzo di tjtag:
- scompattare l'archivio con il software per jtaggare l'ip301 # sudo unzip tjtag.zip
- entrare nella cartella dove risiede l'eseguibile: # cd tjtag/linux
N.B. Da qui in poi le operazioni sono comuni alle 2 modalita': - cambiare i permessi a tjtagv2: # sudo chmod 777 tjtagv2
- disattiviamo il demone lp per consentire l'accesso diretto
- alla porta parallela a tjtag
# sudo rmmod lp
- lanciamo tjtag per vedere se tutto fin qui e' ok (permessi, etc): # sudo ./tjtagv2
Dovrebbero apparire una serie di info...andiamo avanti.
-3- Backup della flash:
- Effettuiamo il backup dei primi 4 blocchi della memoria dell'ip301 (blocco 1: bootloader, blocchi 2,3 i codec, e blocco 4 l'interprete dei comandi gestibile via interfaccia seriale: ic......):
Codice: # sudo ./tjtagv2 -backup:custom /window:0x1fc00000 /start:0x1fc00000 /length:0x40000
Se tutto e' ok, verranno visualizzati dei messaggi diagnostici, visualizzato e scritto un file (CUSTOM.BIN.SAVEDxxxxxxxx...) con il dump della memoria.
Se qualcosa non va per il verso giusto potrebbe dipendere da:
- cavo jtag male realizzato o troppo lungo
- collegamenti cavo ip301 errati
- saldature fredde, male eseguite o in corto
-4- Patch di ic...... per consentire l'accesso seriale al programma di diagnostica dell'ìip301:
Il dump che abbiamo effettuato comprende 4 blocchi da 64k ciascuno, quello che ci interessa e' l'ultimo contenente ic.gz (ic...... in formato compresso con gzip).
La patch a ic...... serve per eliminare la richiesta della password quando da seriale si accede al programma di diagnostica premendo INVIO al boot dell'ip301.
Dobbiamo estrarre l'ultimo blocco da 64k dal nostro dump, scompattarlo (con gzip), patcharlo con un editor binario (come hex workshop) e poi riasseamblarlo all'interno del file di dump per poterlo riflashare.
-5- Preparazione per la patch:
- Facciamo una copia del nostro dump... # sudo cp CUSTOM.BIN.SAVEDxxxxxxx CUSTOM.BIN
- Otteniamo ic.gz da CUSTOM.BIN: # sudo dd if=CUSTOM.BIN of=ic.gz bs=256 skip=768 count=256
- Scompattiamo ic.gz: # sudo gunzip -cd ic.gz > ic......
Ora abbiamo ic...... da patchare.
-6- Patch di ic......:
- lanciamo winhex o un qualsiasi hex editor per modificare ic......
- carichiamo ic...... e andiamo all'offset 00023A78 (quasi alla fine del file) e sostituiamo con degli zeri (0) tutto fino
all'offset 00023AC0.
Prima:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00023A70 63 00 00 00 6F 00 00 00 c...o... 00023A80 65 00 00 00 6D 00 00 00 74 00 00 00 75 00 00 00 e...m...t...u... 00023A90 61 00 00 00 6E 00 00 00 37 00 00 00 32 00 00 00 a...n...7...2... 00023AA0 64 00 00 00 72 00 00 00 38 00 00 00 33 00 00 00 d...r...8...3... 00023AB0 34 00 00 00 35 00 00 00 30 00 00 00 0A 20 0A 20 4...5...0.... .
Dopo:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00023A70 00 00 00 00 00 00 00 00 ........ 00023A80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00023A90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00023AA0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00023AB0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
NOTA: non funziona UN CAZZO, perche' il pezzo di firmware che scarichiamo e' piu' piccolo di quello qui descritto, quindi all'offset 00023A78 manco ci si puo' arrivare, perche' finisce prima.
NOTA 2: ma allora perche' non prendere direttamente ic.gz dal firmware nuovo che dobbiamo buttare su, e glielo sbattiamo sopra? sarebbe da provare.
NOTA 3: Perche' cacchio devo scaricarmi 4 blocchi e poi estrarre ic.gz dal dump tramite dd? Tanto vale che mi scarico DIRETTAMENTE il blocco che contiene SOLO ic.gz!
- Salviamo il file (sempre su pendrive) dandogli ad esempio nome icmod...... - Rifacciamo il boot con linux
Se invece stiamo utilizzando ubuntu installato sul pc, possiamo utilizzare ghex (se non e' installato basta andate su Applicazioni->Aggiungi/Rimuovi ed installarlo.
- Lanciamo ghex [Applicazioni->Programmazione->Editor Esadecimale] - Apriamo ic...... e compiamo le stesse operazioni da effettuare
- con winhex...Salviamo il file dandogli nome icmod......
L'immagine salvata non ha controllo di checksum o crc, ma verificate che il file salvato sia lungo esattamente 146.832 byte.
-7- Preparazione per flashare icmod...... patchato:
In ubuntu lanciamo una finestra con la console (vedi prima parte) e torniamo nella nostra cartella di lavoro.
Ricordiamoci nuovamente di disattivare il demone lp se siamo tornati da windows: # sudo rmmod lp
Ora dobbiamo ricomprimere il file patchato (icmod......): Codice: # sudo gzip -c icmod...... > icmod.gz
Poiche flashare e' un operazione lenta e critica, preferiamo flashare solo il blocco modificato, quindi dovremo preparare un file CUSTOM da dare in pasto a tjtag: # cp icmod.gz CUSTOM.BIN
A questo punto abbiamo pronto il file per essere flashato.
-8- Flash di CUSTOM.BIN (icmod.gz): La prossima operazione e' molto critica e se qualcosa va male l'ip301 sicuramente smettera' (per il momento) di funzionare. Quindi controllate bene le operazioni fin qui eseguite, perche' e' meglio un telefono bloccato che uno da rianimare...
- Andiamo con lo sblocco: scrivendo solo il blocco aggiornato:
Codice: # sudo ./tjtagv2 -flash:custom /window:0x1fc00000 /start:0x1fc30000 /length:0x10000 /silent
NOTA 4: io ho fatto ./tjtagv2 -backup:custom /window:0x1fc00000 /start:0x1fc30000 /length:0x10000 backuppandomi solo quel che devo moddare, come detto sopra nella NOTA 3. Comunque non funziona un cazzo :)
Al termine dell'operazione se tutto e' andato per il verso giusto sara' possibile l'accesso via seriale all'ip301
N.B. se non riusciamo a flashare il telefono, cioe' tjtag non riesce a completare la scrittura, armiamoci di pazienza e ricontrolliamo tutti i collegamenti cavo jtag <-> ip301: e' un problema nostro e non del telefono. Se tutto e' ok l'operazione di flash va in porto senza problemi ed il telefono funzionera come al solito, anzi meglio visto che ora e' possibile accedervi via seriale.
-9- Rianimiamo il morto: Come detto precedentemente se qualcosa e' andato storto il telefono non funzionera' piu'...pero' possiamo sempre riflashare il dump che abbiamo effettuato in precedenza. Diamo un occhiata alla nostra cartella di lavoro:
Codice: # ls -l CUSTOM.BIN.*
Controlliamo che l'output del comando ls riporti almeno un file (potrebbero essercene piu' di uno se abbiamo dato diverse volte il comando per effettuare il backup) e controlliamo che la lunghezza sia esattamente di 262144 bytes. Annotiamo il file che e' ok e facciamone una copia:
Codice: # cp CUSTOM.BIN.SAVED_xxxxxxx CUSTOM.BIN (sostituite xxxxxxx con la parte finale del vostro file CUSTOM.BIN.SAVED...)
Rianimiamo l'ip301: Codice: # sudo ./tjtagv2 -flash:custom /start:0x1fc00000 /window:0x1fc00000 /length:0x40000
Quest'ultima parte sara' meno approfondita in quanto giunti a questo punto saremo tutti piu' smaliziati ed informati...
Se siamo gia in possesso di una versione patchata di ic.gz e' possibile andare direttamente al punto -8- (flash di CUSTOM.BIN), tuttavia consiglio sempre di fare il backup della flash per testare il funzionamento del collegamento jtag.
Certi del funzionamento del collegamento jtag, dotati di buona pazienza, nulla ci impedisce di flashare l'intero contenuto della memoria dell'ip301 con un firmware nobrand per non dover intervenire via seriale. Basta saper attendere perche il tempo per flashare l'intera memoria e' lungo...
Io consiglio questo firmware IP-301_80521.rom perche' l'ultimo (IP301_0810170.rom) ha un bug che esclude la prima suoneria. Il comando per flashare l'intera memoria con un file .rom e' il seguente:
Codice: # sudo ./tjtagv2 -flash:custom /start:0x1fc00000 /window:0x1fc00000 /length:0x200000
oppure
Codice:
# sudo ./tjtagv2 -flash:wholeflash
NOTA 5: MA ALLORA TANTO VALE FARLO DIRETTAMENTE, piuttosto che sbattersi a fare interfacce seriali, patchare con winhex, ricaricare pezzi di firmware per abilitare la seriale, saldare la seriale eccetera eccetera: MA CHI CAZZO TE LO FA FARE? Fai l'interfaccia JTAG, la lasci collegata, lanci il wholeflash, e vai a prenderti un caffe' o a farti un giro; il computer lavorera' per te! :)
Se vogliamo seguire la via seriale anche per scoprire il programma di diagnostica dell'ip301, colleghiamo il cavo seriale all'ip301.
- Impostiamo un ip fisso sul pc (p.e. 192.168.1.10)
- Colleghiamo con un cavo diretto la porta ethernet del pc alla porta LAN dell'ip301
- Lanciamo tftpd32, attiviamo il server tftp e dhcp impostando per quest'ultimo un indirizzo di partenza appartenente alla stessa sottorete del pc (p.e. 192.168.1.20) e un numero adeguato di ip da assegnare (****): 50. Inseriamo anche la subnetmask corretta (255.255.255.0).
Ultima operazione e' quella di verificare la presenza di voip.gz nella cartella di upload del server tftp
- Lanciamo putty, selezioniamo la porta COM alla quale e' collegato il telefono e modifichiamo la velocita' da 9600 a 57600.
- Accendiamo il telefono: se tutto e' ok, apparira il POST.
- Premiamo INVIO ed entriamo nel programma di diagnostica.
- Selezioniamo
Codice: [F] Tftp ****** e poi
Codice: [2] Burn Voip to Flash
Ed il gioco e' fatto...
In questa guida non vi sono dati sensibili di nessun operatore quindi per cui non viola nessuna legge, la riparazione di un telefono che si guasta e consentita dal nostro ordinamento, ogniutilizzo illecito delle informazioni qui riportate sono da attribuire a ogni singola persona. E COMUNQUE, VAFFANCULO, IL TELEFONO E' MIO E CI FACCIO IL CAZZO CHE MI PARE.