Menügeführtes Hilfsskript für "TP-Link WR841N: RAM und Flash aufrüsten"

Es gibt eine menügesteuerte Alternative für Freifunker, die reihenweise TL-WR841 Router speichermäßig aufrüsten möchten und die die Befehlsfolgen aus dem c’t Artikel nicht immer wieder händisch leicht modifiziert auf ihrem Raspberry Pi eingeben möchten.
Es handelt sich um das Shell-Skript "flashdumper.sh"

Das Skript und weitere Informationen dazu sind hier zu finden: GitHub - oszilloskop/FlashDumper: TP-Link WR841N: RAM und Flash aufrüsten - Flash Dumper Skript für Linux und macOS
Technisch sollte alles vorhanden sein. Von der Bedienung her gibt es bestimmt noch Optimierungspotenzial.

15 Likes

Das Skript wurde weiterentwickelt und etwas bedienerfreundlicher gestaltet. Es unterstützt nun neben dem Raspberry Pi auch noch weitere USB-Flasher-Programmer. Weiterhin ist es jetzt unter Linux oder unter macOS nutzbar.

Kleiner Tipp am Rande:
Ein CH341A-Flash-Programmer (USB) und ein SOIC SOP8 zu DIP8 Adapter kosten zusammen nicht mal 15€ (keine China-Bestellung).
Unabhängig davon, ob nun ein Raspberry Pi oder ein beliebiger USB-Flasher verwendet wird, kann ich nur wärmstens einen SOIC SOP8 zu DIP8 Adapter empfehlen. Er ist deutlich handlicher als ein (mein) Zangenadapter. Bei dem Adapter ist darauf zu achten, dass es sich um einen Adapter für 200 mil Chips handelt.

10 Likes

Danke für die Arbeit.

Getestet auf Raspi 2, PineA64(+) und x86 32/64.

Faulerweise in den X11-Desktop eingebaut:
x11-Desktop configs im github

Testaufbau:

Danke an Freifunker Hans-Peter aka. d3dhemmer aus Sankt Augustin für die pine64 Hardware.

3 Likes

Hm, habe meinen CH341A-USB-Programmer noch nie mit meinem Raspi benutzt, immer nur mit meinem Mac. Und nun muss ich bei Dir lesen, und selber bei mir feststellen, dass auf dem Raspi der USB-Zugriff auch Root-Rechte benötigt. Ich gehe mal davon aus, dass das auf allen Linux-Kisten so sein wird (@alladin: Kannst Du das bestätigen?). Auf einem Mac, mit per brew installiertem flashrom-Tool, ist dieses nicht notwendig. Daher ist es mir nicht aufgefallen.

Das Problem lässt sich jedoch schnell lösen. Es ist eigentlich im Skript schon alles vorbereiten. Auf Linux-Kisten bedarf es dann jedoch bei jedem erneuten Skriptlauf einer einmaligen Eingabe des Root-Passwortes. Dadurch wird der Zugriff auf /dev/usb/… gewährt und die Dateirechte der durch das Skript erzeugten Flash-Dumps etc. bleiben beim aktuell angemeldetem User.

So, das Problem ist behoben.
Siehe: Eingabe eines sudo-Passwortes ist unter Linux jetzt immer notwendig · oszilloskop/FlashDumper@9a4209d · GitHub

Unabhängig vom Programmer-Type ist unter Linux jetzt bei jedem Skriptlauf eine einmalige Eingabe des sudo-Passwortes notwendig. Bevor das Tool 'flashrom' vom Skript erstmalig aufgerufen wird, wird das Passwort automatisch abgefragt.

P.S.
Falls vorher noch eine alte Version des Skriptes verwendet wurde, so muss im Setup erneut einmalig der Programmer-Type ausgewählt werden. Erst dann greift der Fix.

1 Like

Theroretisch reicht ein Hinzufügen des Users zur Gruppe Dialout bei den Rechten (ähnlich wie bei der Arduino Ansteuerung über USB). Da ich faul bin und Einzelnutzer auf den Kisten, spare ich mir ein sudo mit chmod +s /usr/sbin/flashrom und chmod +t /usr/sbin/flashrom:

Sehr geil! Das werde ich fortan auch nutzen…

2 Likes

Wie ist denn das mit der 3,3/5V Geschichte bei den Dingern? :thinking:
Ich lese grade das die 5V liefern und nicht umschaltbar sind…

Gruß Marius

Lediglich der CH341A-Chip wird hier mit 5V versorgt.
Die zu programmierenden EEPROM-ICs werden über den ZIF-Sockel Vcc-seitig nicht mit 5V versorgt, dort ist Vcc immer 3,3V.

Spannungs-technisch sind die I/O Pins der 24xx/25xx-Serie recht genügsam, meist sind sie so zwischen 2,5V bis 5V spezifiziert. Wenn der CH341A nun I/O-seitig mit 5V treibt, dann ist trotzdem alles im erlaubten Bereich.

Der Programmer hat die spezifizierte Aufgabe 24xx/25xx I2C EEPROMs zu programmieren, und das macht er gut.

Evtl. Interessante Links: eevblog und DataSheet CH341A

Aber ich drifte vom Hauptthema dieses Threads ab, ist ja jetzt doch etwas hardwarelastig geworden.

EDIT:
Evtl. wäre für weitere HW-Fragen der folgende Thread ein besserer Ort:

1 Like

Moin @Jason,

vielen Dank für dein cooles Skript. Wir planen bzw. überlegen ja schon seit längerem, ob sich das Aufrüsten für eine größere Menge an 841ern realisieren lässt.

Wir würden dabei gerne ohne die Geräte zu öffnen die Partitonen per SSH auslesen. Soweit ich es verstanden habe, benötigt man mtd0(Mac-Adresse und Hardware-ID) und mtd4 (ART).

Dann würden wir den neuen ROM-Chip bespielen und fertig gefläscht dem Router beilegen. Das eigentliche Löten wollen aber von einer Firma erledigen lassen, weil es uns um mehrere hundert Geräte geht. Das würden wir im Team von Freiwilligen nicht realisiert bekommen.

Du lässt ja die Mac manuell eingeben. Könnte man die nicht aus MTD0 auslesen? Und ähnlich, wie du es für die ART-Parition in Zeile 535ff gemacht hast an die passende Stelle in den neuen Bootloader schreiben?

Grüße
Matthias

PS: Wir haben die Mac und die Hardwareadresse gefunden:

hexdump -s 0x0001FC00 -n6 /dev/mtd0 |cut -d' ' -f2-4 |tr -d ' '|head -n 1
hexdump -s 0x0001Fd00 -n8 /dev/mtd0 |cut -d' ' -f2-4 |tr -d ' '|head -n 1

PPS: Zu beachten ist, dass man das auf einem 841er ausführen muss, weil die Kisten scheinbar Little-Endian sind. Wenn man mtd0 auf eine x86-Kiste dumpt und es dort ausführt, sind die Stellen paarweise vertauscht.

3 Likes

Mein Skript ist lediglich eine Halbautomatisierung der Besfehlsfolgen aus dem c’t-Artikel.
Die von Dir vorgeschlagene Methode sollte aber prinzipiell funktionieren.

In der Beschreibung vom neu verwendeten Bootloader ‚router-u-boot‘ ist eine Grafik aufgeführt, in welcher man sehen kann, wo z.B. beim TP-Link TL-MR3020 die MAC im Stock-Bootloader liegt. Siehe FlashMemoryMap TL-MR3020.
Wenn ein Partition-Dump per SSH erstellt wird, und die Position der MAC bekannt ist (evtl. immer gleich) dann sollte das Auslesen der MAC auch automatisiert klappen.
Evtl. kann @anon88999732 genereller etwas zur Stock-Position der MACs bei den unterschiedlichen HW-Versionen der 841’er sagen.

P.S.
Bei der Bestimmung der Hardware-ID kann ich nur Empfehlen, dass sich an das Schemata des Gluon-Patches von Freifunk Hannover gehalten wird. Dann gibt es, z.B. bei einem Community-Wechsel eines gemoddeten Routers, kein Firmware-Kuddelmuddel.
Dieses Schemata wird auch von meinem Skript verwendet. Siehe Zeile 638ff.

Edit:
Ah, sehe gerade, Ihr habt es schon gefunden.

2 Likes

Für die interessierten Mitleser, wir entwickeln hier auf Basis des Skriptes oben ein nicht-interaktives, was sich beim Anschließen eines 841ers die Infos per SSH saugt und einen neuen Chip fläscht.

@corny456, wenn ich so gerade drüber nachdenke, wir sollten noch eine Abfrage machen, ob das Auslesen der MAC, HWID und ART-Partition erfolgreich war. Nicht dass wir ein Image mit Datenmüll reinschreiben.

2 Likes

Jup… Erste funktionsfähige Version hab ich grad gepusht… Tests mit einer V11 sind so durchgelaufen. :tada:

2 Likes