23
Feb 14 2015

OpenWRT su DGN2200v1

Il mio firmware preferito per i router è OpenWRT: è estremamente versatile, in quanto trasforma un router in una Linux box, e molto molto stabile. Basti pensare che il mio router principale, il TP-Link TD-W8970, ha fatto più di 100 giorni di uptime senza mai dare problemi.

Questa volta il router su cui ho cercato di installarlo è il Netgear DGN2200 prima versione. Può essere riconosciuto dall’assenza di versioni nel nome del modello dell’eticheta posta sul fondo.

Questo device è basato su piattaforma Broadcom brcm63xx, quindi su OpenWRT l’ADSL non sarà più disponibile poiché richiede dei blob proprietari compatibili solo con un kernel di 10 anni fa. Se vi serve ma volete comunque potenziare il vostro dispositivo, dovrete per forza ricorrere a ModFS, un firmware basato su quello stock che rende possibile l’aggiuntà di funzionalità tramite una memoria USB.

Un’altra cosa che può far desistere dal cambio è che per flashare OpenWRT è necessario utilizzare l’interfaccia seriale. Il formato dell’interfaccia originale è proprietario e aggiunge al filesystem squash e al kernel compresso con LZMA un header proprietario. Ci sarebbero anche i tool per creare quell’immagine, basterebbe scaricare il pacchetto GPL dal sito ufficiale Netgear. Ci ho anche provato, portando al brick il router a causa di un’incompatibilità tra la versione di JFFS2 dei tool e del kernel di OpenWRT.

Il mio amico proprietario del firmware comunque ha una connessione in fibra ottica, quindi non gli interessava molto dell’ADSL, e per il flash tramite seriale e TFTP si è fidato di me, che ho fatto più volte la procedura con router diversi :-) .

Vi consiglio di leggere prima tutta la guida, prima di fare l’upgrade.

Per portare a termine la procedura avrete bisogno delle seguenti cose:

  • Cacciavite Torx T8
  • Convertitore TTL a 3.3V: un PL2303 per avere l’USB (io ho usato questo, è contenuto anche nei cavi Nokia CA-42), oppure un FTDI o un MAX2323, o Arduino (non sono sicuro di questo, dato che lavora a 5V)
  • Software per la gestione della seriale (io ho usato l’IDE Arduino, ma qualsiasi software dovrebbe andare)
  • Server TFTP (ho usato TFTPGUI, che è scritto in Python)
  • Cavo di rete
  • Privilegi di root/sudo/amministratore
  • Immagine di OpenWRT: scaricatela dalla sezione download ufficiale, la versione che preferite. Io ho scaricato l’ultima stable, ovvero Barrier Braker (14.07). Una volta selezionata la versione scaricate il file brcm63xx/generic/openwrt-96358VW-generic-squashfs-cfe.bin

Procuratevi prima di tutto i vari software e assicuratevi, se siete su Windows, di avere i driver del vostro convertitore seriale.

Dopodiché impostate un indirizzo statico alla vostra connessione cablata. Per non cambiare le impostazioni del router insierite 192.168.1.100 e netmask 255.255.255.0, il resto vuoto. Se avete altre interfacce con un indirizzo di quella rete (ovvero 192.168.1.x) disabilitatele.

Avviate anche il server TFTP. Se come me usate TFTPGUI, basta inserire il firmware nella directory tftproot e avviare il server da root con python3 tftpgui.py --nogui. Il parametro nogui è opzionale, io l’ho aggiunto perché non ho thinker per python 3. Nei sistemi POSIX non potete avviare il server da utente non privilegiato perché TFTP lavora sulla porta 69.

Adesso bisogna preparare l’hardware. Il DGN è facile da aprire, a patto che abbiate il cacciavite torx: basta svitare le 4 viti poste sotto i gommini inferiori, che peraltro non sono neanche incollati.

La seriale si trova vicino alla schermatura. Ecco un’immagine:

Interfaccia seriale del DGN2200

Questa seriale non è di certo tra le migliori che potessero capitare: non solo non ha gli header, ma i pad di Tx e Rx non sono neanche forati, quindi, se come me non volete stagnare niente, è molto difficile tenere i fili con una sola mano. Per fortuna c’è quella schermatura che è connessa a massa, quindi almeno la massa la potete attaccare con il nastro adesivo. Se avete del filo con anima singola e abbastanza rigida riuscite a tenere con nastro adesivo anche i fili di Rx e Tx, o almeno uno dei due in modo da avere una mano libera. Nel mio caso ha funzionato.

Dopo la seriale attaccate anche il cavo di rete e di alimentazione, ma non accendete ancora il Netgear.

Aprite il programma della seriale. Le impostazioni per la seriale sono 115200 baud per secondo, 8N1, il resto dipende dal vostro convertitore.

Accendete il router e premete un tasto qualsiasi sul computer, serve per fermare il boot. Avete solo un secondo per farlo.

Se ce l’avete fatta dovrebbe esserci un prompt con la scritta CFE>.

Date il comando flashimage openwrt-96358VW-generic-squashfs-cfe.bin.

Non mi sono salvato l’output, ma se va tutto bene prima dovrebbe venire fuori una cosa simile a questa (vado a memoria):

Loading from 192.168.1.100:openwrt-96358VW-generic-squashfs-cfe.bin
Loaded xxx bytes.
Flashing into 0xb....

Dopodiché si dovrebbe riavviare. Questa volta lasciate che faccia il boot, andrà su OpenWRT.

Io ci ho provato in due giorni diversi perché al primo mi dava errori tipo eccezioni, li scriveva molto velocemente sulla seriale, e non flashava niente, anche se riavviavo il router, staccavo l’alimentazione etc… Inoltre dovevo dargli manualmente l’indirizzo IP, anche se era impostato correttamente. Non so come mai.

Al secondo giorno invece è andato senza problemi, ma avevo rinominato il file di OpenWRT in stable.bin ed era quando avevo già brickato provando tramite web.

In ogni caso se funziona dovreste vedere le informazioni tipiche di un boot di Linux sulla seriale e dato che ci siete potreste anche cambiare direttamente dalla seriale la password di root. Dovete prima attivare la console con il tasto invio, quindi dare il comando passwd.

Se non avete problemi in meno di mezz’ora dovreste riuscire a compiere la procedura e vi troverete con un router ricco di funzionalità.

Per il momento abbiamo provato solamente il network base (rete cablata e wireless) e tutto andava correttamente.

Casomai se avete problemi fatemi sapere :-) .

23 Commenti

  • ciao, ma vuoi dire che non andrà più inernet? E poi l’aggiornamento tramite il classico tasto upgrade non funziona?
    Volevo provare, ma essendo che ho solo questo non vorrei fare danni. Ciao e grazie

  • Ciao, confermo, non andrà internet, ma avrai bisogno di un altro modem, poiché la piattaforma ADSL Broadcom non è supportata.
    Se ti serve averlo, non farlo. L’amico a cui ho fatto il cambio ha la fibra ottica, quindi del modem ADSL non gli interessa proprio nulla.

    Fai bene a evitare di fare esperimenti se è il tuo unico router. Un secondo router mi ha sempre salvato la vita, sin dai tempi del DSL-320T.

  • Ciao Bella Guida ! Volevo chiederti se esiste qualcosa di flashabile direttamente dal firmware originale , senza la seriale?

  • Ciao, OpenWRT lo puoi mettere solo con la seriale, però c’è modfs: http://www.hwupgrade.it/forum/showthread.php?t=2297494 .
    Non è un vero e proprio firmware, ma una modifica di quello originale, però non l’ho usato molto, quindi non ti saprei aiutare più di tanto.

  • Modfs l’ho usarto per un bel po’ ma volevo provare qualcosa di diverso appunto. visto che non è più il mio router principale. Come interfaccia va bene questa? http://www.ebay.it/itm/Cavo-adattatore-convertitore-RS232-USB-TTL-con-PL2303HX-USB-to-TTL-adapter-/171560642879?hash=item27f1cfa93f
    Grazie

  • Ciao, sì, è perfetto, ho usato anche io un adattatore basato su PL2303.

    Comunque se hai altri dispositivi che funzionano a 3,3V puoi usare quelli.
    Arduino avrebbe il TTL, ma l’alto è a 5V, quindi non va bene.

  • Ciao,
    Io ho un TP-Link TL-WR941N/ND v5
    Con questa versione di openwrt:”Attitude Adjustment 12.09 / LuCI 0.11.1 Release (0.11.1)”.
    Recentemente mi si è presentato un problema, quando eseguo una modifica e salvo questa non viene salvata( nel mio caso la password per l’account ddns), ho inoltre provato a modificare parametri da ssh ma quando eseguo il comando “uci commit ddns” mi viene restituito il segunete errore “I/0 ERROR”…sai aiutarmi?

    Grazie in anticipo

  • Ciao, tramite SSH riesci a salvare i file?

  • In che senso? Facendo i comandi da ssh li esegue ma poi mi da errore sul commit, ho provato anche a fare il backup, modificare i file di testo e ripristinarli ma niente da fare, non ne vuole sapere

    Grazie

  • Nel senso della modifica vera e propria, per esempio con l’editor “vi”.
    Inoltre prova a controllare i log del kernel.

    Secondo me potresti aver finito lo spazio sull’overlay (in caso dovresti disinstallare qualcosa) oppure in qualche modo la partizione ti si è rovinata e si è rimontata in Read Only…

  • Piero sono arrivato a dare il comando “flashimage stable.bin”ma non parte il flashing. Sto usando linux tftpgui e Arduino IDE il monitor seriale.
    L’ immagine l’ ho rinominata stable.bin e messa dentro la cartella tftproot. Il router è pingabile e vedo il log dal monitor seriale se lo lasciò partire normalmente. Cosa ho sbagliato?

  • Hai impostato un indirizzo IPv4 statico al computer?
    Visto che mi hai detto che sei su Linux, se stai usando Network Manager lo devi impostare da lì, altrimenti se lo fai da ifconfig lo devi stoppare, perché rimette il DHCP. In generale io preferisco fare questi lavori stoppandolo e usando direttamente ifconfig da root.

    A proposito di root: tftpgui lo stai usando da root?

  • Piero ho risolto era una impostazione del monitor della seriale! Ho fatto lo screen shot se lo vuoi includere nella guida e il comando per far partire il flash è:
    “f 192.168.1.100:stable.bin” così ha funzionato tutto !!! Grazie! ;-)

  • Ciao, meno male che si è risolto, così potrai godere di molte più funzionalità.
    Grazie anche per l’offerta dell’immagine, ma secondo me la guida va già bene così :-) .

  • Ciao, l’immagine della seriale sei sicuro che il 6° pin sia GND o gli RX TX invertiti?
    scusa se ti chiedo ma nel sito openwrt è diverso:

    http://wiki.openwrt.org/toh/netgear/dgn2200 

    (Dove c’è scritto serial)

  • Ciao,
    RX e TX sono sempre da invertire quando le colleghi al tuo cavo, ovvero quello che per il router è TX per il computer è RX e quello che per il router è RX è il TX del computer.
    A me pare di averli scritti nel verso secondo il router, forse quelli nel wiki di OpenWRT sono i pin a cui devi collegare le rispettive porte del tuo convertitore USB-TTL o RS232-TTL.
    In ogni caso se inverti Tx e Rx non succede nulla, al massimo non vedi nulla sulla console e basta girare i due fili.

  • OK grazie mille! l’ultima cosa VCC perché non si collega?
    PS. Come interfaccia ho comprato la stessa di Lapo qui sopra…

  • Perché il tuo convertitore è già alimentato dalla USB.

  • Ciao, ho provato varie combinazioni di velocita nel collegamento seriale, oltre a 115200 N81, ma ricevo solo stringhe di caratteri illeggibili.
    Ho provato con Reflection e Putty ma il risultato è identico, hai qualche suggerimento?
    Grazie

    Claudio

  • Ciao, sei sicurissimo di aver fatto i collegamenti in modo corretto?
    In alternativa c’è qualcosa che non funziona (convertitore, o router…).

  • Ciao, io quando lancio il comando “flashimage 192.168.1.100:po.bin” il server invia il file ma poi mi da il seguente errore :


    Exception 32: EPC=804275E4, Cause=8041DD1C (BusErrWr )
    RA=AAAAAAAA, VAddr=8041DD1C

    0 ($00) = 66702028
    AT ($01) = 203D2030

    v0 ($02) = 45373020
    v1 ($03) = 72612028

    a0 ($04) = 203D2030
    a1 ($05) = 3437300A
    a2 ($06) = 0A00AAAA
    a3 ($07) = AAAAAAAA

    t0 ($08) = AAAAAAAA
    t1 ($09) = AAAAAAAA

    t2 ($10) = AAAAAAAA
    t3 ($11) = AAAAAAAA

    t4 ($12) = AAAAAAAA
    t5 ($13) = AAAAAAAA

    t6 ($14) = AAAAAAAA
    t7 ($15) = AAAAAAAA

    s0 ($16) = AAAAAAAA
    s1 ($17) = AAAAAAAA

    s2 ($18) = AAAAAAAA
    s3 ($19) = AAAAAAAA

    s4 ($20) = AAAAAAAA
    s5 ($21) = AAAAAAAA

    s6 ($22) = AAAAAAAA
    s7 ($23) = AAAAAAAA

    t8 ($24) = AAAAAAAA
    t9 ($25) = AAAAAAAA

    k0 ($26) = AAAAAAAA
    k1 ($27) = AAA2AAAA

    gp ($28) = AAAAAAAA
    sp ($29) = AAAAAAAA

    fp ($30) = AAAAAAAA
    ra ($31) = AAAAAAAA”

    Ho provato a dare un occhiata ma non ho trovato nulla ! Ora riprovo a cercare ma spero tu abbia una soluzione :) !

  • Risolto ! con le nuove versioni del firmware il comando da dare è “f” e non più flashimage !

  • Ciao, anche a me a volte forse aveva dato quel problema, ma in quel caso ho riavviato e ho rifatto…

    Aggiungo che il proprietario del DGN2200 ha voluto tornare al firmware originale per usarlo di nuovo con una linea ADSL e il procedimento è stato identico a quello per OpenWRT, ma, anziché trasferire con TFTP l’immagine di OpenWRT, bisogna trasferire direttamente il file di aggiornamento chk disponibile sul sito della Netgear.

Aggiungi un commento

Completa la form sottostante per aggiungere un commento

CAPTCHA
Scarica il CAPTCHA in wav.