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 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.
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.
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.
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:
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.
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:
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.
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.
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.