Notizen zur Wiederherstellung per Serieller Schnittstelle

Die Treiber der Seriellen Kabels sind u. U. fehlerhaft und es kann sich sowohl der COM-Port als auch der ganze PC aufhängen. Empfehlung: Alles speichern, Backup machen oder Bastel-PC benutzen.

Solange der Bootloader eines Geräts noch fehlerfrei geladen wird, kann die Firmware eines TP-Link-Routers relativ einfach über einen TFTP-Server (lokal oder im Netz) wiederhergestellt werden. Normalerweise reicht es dazu aus, beim Router den Reset-Taster beim Booten gedrückt zu halten. Funktioniert das nicht per Taster, so kann man sich per USB TTL-Adapter und putty-Client die Konsole anzeigen lassen und ggf. manuell das Update starten.

Eine deutsche Anleitung am Beispiel des WR841ND gibt es z. B. hier

Sollte der Bootloader selbst fehlerhaft sein, so muss der Flash-Speicher rausgelötet und neu bespielt werden. Das ist wesentlich komplizierter, als der bloße Zugriff auf die Serielle Schnittstelle. Eine Anleitung dafür gibt es z. B. hier: https://wlan-si.net/en/blog/2013/01/07/writing-u-boot-directly-to-tp-link-wr741nd-router-flash/

Hängt das TP-Link-Gerät am seriellen Kabel, kann per Putty ganz einfach auf die Konsole zugegriffen werden. Beim Einschalten sieht man den Bootloader und muss vor dem Starten des Kernels „tlp“ ins Putty-Fenster tippen. Dann bleibt das Gerät mit einem „hb>“-Prompt und folgenden Ausgaben stehen:

U-Boot 1.1.4 (Build from LSDK-9.5.3.16 at Oct 13 2014 - 17:01:20)

ap143 - Honey Bee 1.1

DRAM:   32 MB
Flash Manuf Id 0xc2, DeviceId0 0x20, DeviceId1 0x16
Flash:  4 MB
Using default environment

In:    serial
Out:   serial
Err:   serial
Net:   ath_gmac_enet_initialize...
ath_gmac_enet_initialize: reset mask:0xc02200
Scorpion ---->S27 PHY*
S27 reg init
GMAC: cfg1 0x800c0000 cfg2 0x7114
eth0: ba:be:fa:ce:08:41
athrs27_phy_setup ATHR_PHY_CONTROL 4:0x1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 4:0x10
eth0 up
Honey Bee ---->  MAC 1 S27 PHY*
S27 reg init
ATHRS27: resetting s27
ATHRS27: s27 reset done
GMAC: cfg1 0x800c0000 cfg2 0x7214
eth1: ba:be:fa:ce:08:41
athrs27_phy_setup ATHR_PHY_CONTROL 0:0x1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 0:0x10
athrs27_phy_setup ATHR_PHY_CONTROL 1:0x1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 1:0x10
athrs27_phy_setup ATHR_PHY_CONTROL 2:0x1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 2:0x10
athrs27_phy_setup ATHR_PHY_CONTROL 3:0x1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 3:0x10
eth1 up
eth0, eth1
Setting 0x181162c0 to 0x5cb9a100
is_auto_upload_firmware=0
Autobooting in 1 seconds
hb>

Hier sind folgende Befehle verfügbar:

hb> help
?       - alias for 'help'
boot    - boot default, i.e., run 'bootcmd'
bootd   - boot default, i.e., run 'bootcmd'
bootm   - boot application image from memory
cp      - memory copy
erase   - erase FLASH memory
help    - print online help
md      - memory display
mm      - memory modify (auto-incrementing)
mtest   - simple RAM test
mw      - memory write (fill)
nm      - memory modify (constant address)
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
progmac - Set ethernet MAC addresses
reset   - Perform RESET of the CPU
run     - run commands in an environment variable
setenv  - set environment variables
tftpboot- boot image via network using TFTP protocol
version - print monitor version

Hält man beim Einschalten den Reset-Taster gedrückt, macht der Router folgendes:

U-Boot 1.1.4 (Build from LSDK-9.5.3.16 at Oct 13 2014 - 17:01:20)

ap143 - Honey Bee 1.1

DRAM:   32 MB
Flash Manuf Id 0xc2, DeviceId0 0x20, DeviceId1 0x16
Flash:  4 MB
Using default environment

In:    serial
Out:   serial
Err:   serial
Net:   ath_gmac_enet_initialize...
ath_gmac_enet_initialize: reset mask:0xc02200
Scorpion ---->S27 PHY*
S27 reg init
GMAC: cfg1 0x800c0000 cfg2 0x7114
eth0: ba:be:fa:ce:08:41
athrs27_phy_setup ATHR_PHY_CONTROL 4:0x1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 4:0x10
eth0 up
Honey Bee ---->  MAC 1 S27 PHY*
S27 reg init
ATHRS27: resetting s27
ATHRS27: s27 reset done
GMAC: cfg1 0x800c0000 cfg2 0x7214
eth1: ba:be:fa:ce:08:41
athrs27_phy_setup ATHR_PHY_CONTROL 0:0x1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 0:0x10
athrs27_phy_setup ATHR_PHY_CONTROL 1:0x1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 1:0x10
athrs27_phy_setup ATHR_PHY_CONTROL 2:0x1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 2:0x10
athrs27_phy_setup ATHR_PHY_CONTROL 3:0x1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 3:0x10
eth1 up
eth0, eth1
Setting 0x181162c0 to 0x5cb9a100
is_auto_upload_firmware=1
eth1 link down
eth0 link down
Using eth1 device
TFTP from server 192.168.0.66; our IP address is 192.168.0.86
Filename 'wr841nv9_tp_recovery.bin'.
Load address: 0x80800000
Loading: T T T
Retry count exceeded; starting again
## Booting image at 9f020000 ...
   Uncompressing Kernel Image ... OK

Starting kernel ...