Aus Spaß an der Freude habe ich für grob 15€ einen TP-Link TL-WR1043ND v1.0 bei eBay erstanden. Das Gerät wurde als defekt verkauft, laut Artikelbeschreibung war der Router nun nach einem Flash-Unfall in einer endlosen Boot-Schleife. Mich hat die Neugierde gepackt und so habe ich mich auf die Bieterschlacht eingelassen, mit dem gesetzten Ziel, den Router wieder zu reparieren.

Lage sondieren

Dieses Router-Modell ist in der OpenWrt-Gemeinde relativ beliebt, da es 32MB RAM und 8MB Flash, Gigabit Ethernet, USB, Serial und JTag-Support bietet. Alles da also.

Alles, was ich im folgenden beschreibe ist kein Geheimwissen und kann im Prinzip auch aus dem passendem Wiki-Artikel bei OpenWrt nachgelesen werden. Für jeden Nachahmer ist dieser Artikel Pflichtlektüre.

Was muss also getan werden?

  • Gehäuse öffnen
  • Serielle Schnittstelle verbinden
  • Boot-Schleife unterbrechen
  • Flash löschen
  • neues Image per TFTP einspielen
  • ???
  • Profit!!

Gehäuse öffnen

Meiner Meinung nach der (gefühlt) fummeligste Part, weil ich immer Angst habe, etwas zu zerstören. Aber es ist wie immer, mit sanfter Gewalt bekommt man fast alles geöffnet. Hier die einzelnen Schritte:

  • Antennen abschrauben
  • die hinteren Gummifüße entfernen (unter den vorderen Gummifüßen sind keine Schrauben)
  • drückt man die losen Schrauben ins Gehäuse, kann man so den oberen Deckel anheben
  • die Halterungen der drei Antennenbuchsen abschrauben (8mm Nuss hat mir gut geholfen) und in das Gehäuse drücken (vorsicht, hinter den äußeren Antennenbuchsen befindet sich ein bisschen Gehäuse im Weg, einfach daran vorbei schieben)
  • die Bodenplatte von innen nach unten drücken
  • jetzt kann man schwarzen Rahmen nach hinten weg ziehen und entfernen (das ist der Part mit der sanften Gewalt)
  • der obere und untere Deckel sind vorne links und rechts eingehakt, ein kleiner Schlitzschraubendreher hilft, die Haken zu lösen
  • die schwarze LED-Front hängt mit drei Haken im oberen Deckel fest und muss gelöst werden

Serielle Schnittstelle

Jetzt ist das Gehäuse offen, die Serielle Schnittstelle wartet auf Ihren Einsatz. Vier Stifte anlöten und man kann in der Zukunft nochmal ran. Leider waren die Löcher in der Platine mit Lötzinn versiegelt, ich konnte die Stifte also nicht einfach einsetzen und anscheinend hat mein Lötkolben nicht genug Leistung, um das Lötzinn zu verflüssigen. (Naja, ist eigentlich nicht mein Lötkolben, den habe ich mir von meinem Bruder geliehen. Danke!) Zum Glück habe ich noch andere Hobbies und so habe ich die Löcher mit einem kleinen Handbohrer geöffnet, den ich normalerweise zum Stiften von Zinnminiaturen verwende. Im Anschluss die Stifte anlöten.

Dann wird ein USB zu TTL Konverter benötigt. Da ich keine Lust hatte, lange zu warten habe ich einfach einen teuren bei Amazon mit CP2102 Chip gekauft. Aus China gibt es die Teile für wesentlich weniger Geld, aber halt nicht von heute auf morgen.

Serielle Schnittstelle

Von links nach rechts:

  • braun: TX (wird an RX des USB-TTL angeschlossen!)
  • rot: RX (wird an TX des USB-TTL angeschlossen!)
  • orange: GND (hier kann man kaum etwas falsch machen ...)

Dann den Konverter an USB Anschließen und ein Terminal-Programm wie screen nutzen. dmesg sagte mir, dass mein Konverter unter /dev/ttyUSB0 zu finden sei. Außerdem benötigt man noch Root-Rechte, Baudrate 115200.

sudo screen /dev/ttyUSB0 115200

USB-TTL verbunden

Jetzt konnte ich dem Router beim Endlosbooten zuschauen. Während auf dem Bildschirm Autobooting in 1 seconds steht, muss schnell tpl + Enter eingegeben werden. Das stoppt die Schleife und der Router wartet auf Eingaben.

Zeit zum Flashen

Zuerst benötigt man einen TFTP-Server, ich habe mich unter Ubuntu für advanced TFTP entschieden. Den Client habe ich zum Testen des Servers direkt mit installiert.

sudo apt-get install atftp atftpd

Die Dokumentation bei Ubuntuusers ist zwar hilfreich aber zumindest für Ubuntu 14.10 viel zu ausführlich. Nach der Installation kann man einfach direkt das Verzeichnis /srv/tftp verwenden und muss nichts konfigurieren. Das passende Barrier Breaker Image für meinen Router muss benannt als code.bin in genau diesem Verzeichnis liegen.

sudo cp ~/Downloads/openwrt-ar71xx-generic-tl-wr1043nd-v1-squashfs-factory.bin /srv/tftp/code.bin

Jetzt benötigt die eigene Netzwerkkarte noch eine feste IP-Adresse 192.168.0.5/24, Netzwerkkabel an den Router anschließen nicht vergessen! Auf der Konsole kann jetzt der Flashbaustein gelöscht und neu beschrieben werden:

Image vom TFTP-Server laden: tftpboot 0x81000000 code.bin

(Zufällig habe ich auch bemerkt, dass man auch einfach tftpboot ohne Parameter eingeben kann, die o.g. Parameter sind quasi default)

Jetzt das Flash löschen: erase 0xbf020000 +7c0000

Die 7c0000 steht für die Größe des Images in Bytes, aber dargestellt als Hexadezimalzahl. Vorher pürfen, ob das Image auch 8126464 Bytes hat, sonst passen die obigen Eingaben nicht!

Flash mit Image beschreiben: cp.b 0x81000000 0xbf020000 0x7c0000

Router booten: bootm 0xbf020000

Jetzt kann man dem Router auf der Konsole beim Booten zuschauen. Wenn er fertig ist kann, wirft einen ein Druck auf die Enter-Taste direkt auf die Router-Konsole. Das Webinterface LuCi kann über 192.168.1.1 aufgerufen werden, sofern man seine Netzwerkkarte entsprechend umgestellt hat. Profit!

Schlusswort

Das Schreiben dieses kurzen Textes hat länger gedauert, als den Router wieder zu reparieren. Nach gut zwei Stunden war alles erledigt und hat mir riesigen Spaß gemacht. Allein das war es mir Wert. Jetzt muss ich mir nur noch überlegen, was ich mit dem Router anfange ...