Linksys WRT160NL Firmware via TFTP und U-boot flashen

Aus Laub-Home Wiki

Nachdem, warum auch immer, der Webflash bei meinem Linksys WRT-160NL immer fehl schlägt, muss ich dannach das Update via Konsole und TFTP machen. Nachdem das Update fehlgeschlagen ist und der Router auf nichts mehr hört, aufschrauben, Konsolenkabel dran und rebooten. Er Bootet schon automatisch in den U-Boot Mode.

Unter Linux oder MacOS

Der Linksys Router muss in den U-Boot Modus gebootet werden. Das sieht dann wie folgt in der Konsole aus:

U-Boot 1.1.6 (Apr 14 2010 - 14:02:36)

DRAM:  ar7100_ddr_initial_config(237) enter!
ar7100_ddr_initial_config(269) exit!


U-Boot 1.1.6 (Apr 14 2010 - 14:02:36)

AP81 (ar7100) U-boot
sri
32 MB
WRT160NL u-boot version: 1.0.0
Top of RAM usable for U-Boot at: 82000000
Reserving 279k for U-Boot at: 81fb8000
Reserving 192k for malloc() at: 81f88000
Reserving 44 Bytes for Board Info at: 81f87fd4
Reserving 36 Bytes for Global Data at: 81f87fb0
Reserving 128k for boot params() at: 81f67fb0
Stack Pointer at: 81f67f98
Now running in RAM - U-Boot at: 81fb8000
id read 0x100000ff
flash size 8MB, sector count = 128
Flash:  8 MB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   ag7100_enet_initialize...
ag7100 get ethaddr for device eth0
Fetching MAC Address from 0x81feb1e0

 --------***** Get the RTL8306SD Manufactory ID=379c *****-------
 Reg6: speed=0 nway=1 duplex=0
 Reg5: speed=0 nway=0 duplex=0
 Reg1: a1=7fd9 a2=30e0 a3=15ac a4=30e0 a5=0
 Reg1: a1=7fd9 a2=30e0 a3=15ac a4=30e0
 Reg1: a1=7fd9 a2=30e0 a3=15ac a4=30e0
 Reg1: a1=7fd9 a2=30e0 a3=15ac a4=30e0
 Reg1: a1=7fd9 a2=30e0 a3=15ac a4=30e0
eth0: 20:aa:4b:c0:bc:55
eth0 up
eth0
### main_loop entered: bootdelay=1

Hit any key to stop autoboot:  1 0 
## Booting WRT160NL ...
Application code length 0x0070e000
Bad CRC: trx.crc32 0x06e39d80 calculate 0xdef98909
 check link duplex:Full/speed:100
dup 1 speed 100
Tftpd start listening on port[69]!

Der PC bzw MAC muss eine IP im Netz 192.168.1.x bekommen, zum Beispiel die 192.168.1.100. Dann hier den folgenden Befehl im selben Ordner absetzten, in dem die in code.bin umbenannte Firmware liegt.

echo -e "binary\nrexmt 1\ntimeout 160\ntrace\nput code.bin\n" | tftp 192.168.1.1

Auf der Konsole des Routers sollte es dann nach einer kurzen bedenkzeit so aussehen und nach ein paar Sekunden sollte er dann automatisch neustarten und booten.

Load address: 0x80060000
Receiving firmware [code.bin] from [192.168.1.100]
Write File : CODE.BIN
#

Current Code Pattern:NL16 , Upgrade Code Pattern:NL16

Code Pattern is correct!
################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 ################
done
Bytes transferred = 7398400 (70e400 hex)
load addr= 0x80060000
boot file= CODE.BIN
NetBootFileXferSize= 0070e400
Erase linux kernel block !!
From bf040000 To bf7dffff
Erase Flash from 0xbf040000 to 0xbf7dffff in Bank # 1 
First 0x4 last 0x7d sector size 0x10000
����   4����   5����   6����   7����   8����   9����  10����  11����  12����  13����  14����  15����  16����  17����  18����  19����  20����  21����  22����  23����  24����  25����  26����  27����  28����  29����  30����  31����  32����  33����  34����  35����  36����  37����  38����  39����  40����  41����  42����  43����  44����  45����  46����  47����  48����  49����  50����  51����  52����  53����  54����  55����  56����  57����  58����  59����  60����  61����  62����  63����  64����  65����  66����  67����  68����  69����  70����  71����  72����  73����  74����  75����  76����  77����  78����  79����  80����  81����  82����  83����  84����  85����  86����  87����  88����  89����  90����  91����  92����  93����  94����  95����  96����  97����  98����  99���� 100���� 101���� 102���� 103���� 104���� 105���� 106���� 107���� 108���� 109���� 110���� 111���� 112���� 113���� 114���� 115���� 116���� 117���� 118���� 119���� 120���� 121���� 122���� 123���� 124���� 125
Erased 122 sectors
Programming.........
Copy to Flash... write addr: bf040000
done
## Booting WRT160NL ...
Application code length 0x0070e000
CRC OK
## Booting image at bf04003c ...
   Image Name:   DD-WRT v24 Linux Kernel Image
   Created:      2014-04-18   4:17:28 UTC
   Image Type:   MIPS Linux Kernel Image (gzip compressed)
   Data Size:    1313112 Bytes =  1.3 MB
   Load Address: 80060000
   Entry Point:  80064950
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK
kernel: org len = 1313112, new len = 1376256
No initrd
## Transferring control to Linux (at address 80064950) ...
## Giving linux memsize in bytes, 33554432

Starting kernel ...

[    0.000000] flash_size passed from bootloader = 8
[    0.000000] bootconsole [early0] enabled

Andere Lösung für Windows

Text copied from: http://wiki.openwrt.org/inbox/wrt160nl?do=show#oem.tftp.install

Set a PC on same network to some address in IP range 192.168.1.[2-254]. Download either Linksys or OpenWrt firmware image, store as code.bin. From serial console abort the U-boot process. Enter this on u-boot command line

ar7100> upgrade code.bin
check link duplex:Full/speed:100
dup 1 speed 100
Tftpd start listening on port[69]!
Load address: 0×80060000

Send file from PC with TFTP:

C:\tmp> tftp -i 192.168.1.1 put code.bin

You should see this on console wait for flash to finish:

Receiving firmware [code.bin] from [192.168.1.10]
Write File : CODE.BIN

Once U-boot command prompt returns enter

ar7100 > go