Flashspeicher upgraden - exemplarisch am TP-Link TL-WR841v9


#1

Moin Freifunker,

dank des tollen Videos von @Manawyrm (vielen Dank dafür!), war ich nun auch in der Lage einen TL-WR841 mit größerem Flash Speicher auszustatten. Wenn alles klappt und man die entsprechende Freifunk Firmware schon vorbereitet hat, ist das eine Sache von vielleicht 30min.

Vorbereitungen:

Benötigte Skills:

  • Löten
  • Gluon kompilieren
  • Routergehäuse halbwegs zerstörungsfrei öffnen
  • Serielle Konsole

Einkaufsliste:

Werkzeug:

  • Lötkolben mit feiner Spitze
  • Entlötlitze
  • Flussmittel
  • Lötzinn
  • Pinzette
  • Kreuzschraubendreher
  • Hebelwerkzeug

Systemvoraussetzungen:

  • Windows ab 7
  • EZP2010 v3.0 Software
  • MiniPro v6.50 Software
  • Putty
  • WinSCP/Filezilla
  • SSH Zugriff auf den Router (installierte OpenWRT/Lede/Freifunk Firmware)
  • U-Boot_mod ([https://github.com/pepe2k/u-boot_mod][1])

1 Gluon kompilieren

Nachfolgend werden die Änderungen für 2016.2.4 beschrieben.
Änderungen für Lede sind im Video erläutert

Datei:
openwrt/target/linux/ar71xx/image/Makefile

Füge ein:

define Device/tl-wr841n-8mb-v9
    $(Device/tplink-8mlzma)
    BOARDNAME := TL-WR841N-v9
    DEVICE_PROFILE := TLWR8418MB
    TPLINK_HWID := 0x08410809
endef
TARGET_DEVICES += tl-wr841n-8mb-v9

Anmerkungen:
Hier wurde ein 841v9 modifiziert. Andere Versionen müssen entsprechend dem o.g. Schema ergänzt werden.
Anders als bei Lede darf BORDNAME nicht verändert werden, da sonst der Kernel nicht bootet. Es darf kein _ verwendet werden.

Datei:
targets/ar71xx-generic/profiles.mk

Füge hinzu:

# TL-WR841N/ND 8MB v9
$(eval $(call GluonProfile,TLWR8418MB))
$(eval $(call GluonModel,TLWR8418MB,tl-wr841n-8mb-v9,tp-link-tl-wr841n-nd-8mb-v9))

Datei:
openwrt/target/linux/ar71xx/base-files/lib/ar71xx.sh

Füge unter tplink_board_detect() { hinzu:

        "084108"*)
                model="TP-Link TL-WR841N/ND 8MB"
                ;;

Anmerkung:
Gluon kann nun kompiliert werden. Nur das Factory Image wird 8MB groß sein. Ich habe die HW ID unmittelbar nach 0841 geändert. Standardmäßig ist hier 00 vorgegeben, ich habe dort 08 für 8MB Flash gesetzt. 16 (16MB) wären ebenfalls möglich.

2 System- und ART-Partition sichern

Per SSH auf den Router einloggen und die System- und ART-Partition ins Temp Verzeichnis kopieren. Sollte auf dem Router noch keine SSH fähige Firmware installiert sein, muss dies zuvor nachgeholt werden.

cat /dev/mtd0 > /tmp/mtd0.bin
cat /dev/mtd4 > /tmp/mtd4.bin

Beide Dateien dann mittels SCP vom Router auf den Rechner kopieren.

3 Flash-Chip auslöten.

Anleitung siehe Video.

4 Neues U-Boot Image erstellen

U-Boot_mod muss nun passend für euren Router kompiliert werden. Für die aktuelleren 841er Modelle bietet der Entwickler [fertige Images][2] an, welche wir hier auch verwenden. Da die Software vom EZP2010 nur den kompletten Speicher auf einmal beschreiben kann, müssen wir einen kleinen Umweg über MiniPro gehen.

4.1 MiniPro

  • MiniPro öffnen
  • Select IC->Search and Select IC
  • Search Device: 25QxxYY (euer Flashtyp z.B. 25Q64FV) -> Select
  • Open -> mtd0.bin -> Enter
  • Gehe zu Adresse: 01FD00
  • ersetze in Spalte zwei 00 durch 08 ein (08 für 8MB Flash)
  • Open -> u-boot_mod__tp-link_tl-wr841n_v9__20170413__git_master-7e7a2ab4.bin (Clear Buffer when loading the file: disabled) -> Enter
  • File->Save->merged.bin

4.2 EZP2010

Der EZP liegt vor euch, die Aufschrift ist lesbar, der USB Anschluss zeigt nach links. Der SOP Adapter wird in den oberen Bereich des Stecksockels eingesteckt. Die Beschriftung des SOP Adapter ist lesbar. Der SPI Chip wird mit der Punkt Markierung nach oben links eingesetzt.

4.2.1 Treiber Signatur von Windows 10 abschalten

  • Eingabeaufforderung im Administratormodus öffnen
bcdedit /set testsigning on
shutdown -r -t 1
  • Nach dem Reboot kann der EZP Treiber installiert werden.

4.2.2 SPI beschreiben

  • EZP2010 Programmer öffnen
  • Detect (Chiptyp wird erkannt, auf Richtigkeit prüfen!)
  • Erase (kann bei leeren Chips entfallen)
  • Load -> merged.bin
  • Prog
  • Verify

5 Flash Chip und serielle Konsole einlöten

Anleitung siehe Video. Zusätzlich die Stiftleiste für die Serielle Konsole einlöten.(Siehe: Router Recovery - TFTP Pushbutton und TTL (Serial Recovery))

6 Firmware flashen

6.1 Webserver

Den Router starten und sich per serieller Konsole einloggen. Den Bootprozess mit einem Tastendruck abbrechen und den Webserver starten.

httpd

6.2 Die ART Partition mtd4.bin wiederherstellen:

http://192.168.1.1/art.html

6.3 Firmware flashen

http://192.168.1.1/

Das Freifunk/OpenWrt/Lede Image laden.

7 Nachbereitung

Der Router startet nun etwas länger als gewöhnlich, da das integrierte JEDEC Script nun noch die Dateistruktur auf die neue Flashgröße anpasst.

df -h

Zeigt nun unter overlayfs:/overlay den verfügbaren Speicherplatz im Flash an.

Happy Hacking!

Abgeleitet aus:

WR841N - SPI Bausteine austauschen / Flash aufrüsten:

Weitere Details: https://tbspace.de/wr84116mbflashmod.html
[1]: https://github.com/pepe2k/u-boot_mod
[2]: http://projects.dymacz.pl/?dir=u-boot_mod


#2

Dieser Mod ist nun Autoupdater fähig.


CPE210 wiederbeleben / unbrick
#3

Hallo,

Dank des tollen Beitrages von Tarnatos und dem hoch informativen Video von Manawyrm, habe ich mich als Anfänger inspirieren lassen, die notwendigen Teile für diesen Mod zu beschaffen. Denn ich würde meine noch recht neue TL-WR841N v.11 und TL-WR841ND v.10 gerne noch recht lange einsetzen.
Vielen Dank für Euren Einsatz bei der Erprobung und Erstellung der Anleitungen.

Beschaffte Flash Chips sind Winbond 25Q64FV (8MB) und Winbond 25Q128FV (16MB).

BTW: da hat sich wohl ein Tippfehler im @Tarnatos Betrag eingeschlichen an dem ich zu Anfang direkt gescheitert bin:

Das Sichern der u-boot- und ART-Partition war recht einfach, einlöten des seriellen Anschlusses auch. Zusammenführen und modifizieren des pepe2k u-boot_mod mit dem Original und das Fashen der Chips mit dem modifizieren Bootloader gelingt. Hatte den so modifizierten Bootloader zuerst im original Flash Chips GD25Q32 (4 MB) des TL-WR841N v.11 getestet (funktioniert)

Es gelingt mir ein Gluon in Version 2016.2.5 für den TL-WR841N v.11 zu kompilieren. (Ist die letzte/neuste Version, erkennbar daran, dass jetzt auch zusätzlich ein Image für TL-WR841ND-v12 erstellt wird.)
Ein so erstellte Image lässt sich auch in den TL-WR841N v.11 installieren und funktioniert einwandfrei mit dem 4 MB Flash Chip. Die Build Umgebung sollte also funktionieren.

Aber mit dem Erstellen von 8MB/16MB Images für den TL-WR841N v.11 habe ich Probleme.
Nach dem ich die oben beschriebenen Änderungen nach Muster in den Dateien ausgeführt habe, wird gar keine Image für die TL-WR841N v.11 (und auch für TL-WR841ND-v12) beim kompilieren mehr erzeugt.

Leider sehen auch die Original Einträge in den Dateien etwas anders aus:
Datei: - openwrt/target/linux/ar71xx/image/Makefile

define Device/tl-wr841n-v11
$(Device/tplink-4mlzma)
BOARDNAME := TL-WR841N-v11
DEVICE_PROFILE := TLWR841
TPLINK_HWID := 0x08410011
IMAGES += factory-us.bin factory-eu.bin
IMAGE/factory-us.bin := append-rootfs | mktplinkfw factory -C US
IMAGE/factory-eu.bin := append-rootfs | mktplinkfw factory -C EU
endef

TARGET_DEVICES += tl-wr841n-v8 tl-wr841n-v9 tl-wr841n-v10 tl-wr841n-v11 tl-wr841n-v12 tl-wr842n-v2 tl-wr842n-v3 tl-wr843nd-v1 tl-wr847n-v8

Datei: - targets/ar71xx-generic/profiles.mk

TL-WR841N/ND v11, v12

$(eval $(call GluonProfile,TLWR841_REGION,TLWR841))
$(eval $(call GluonModel,TLWR841_REGION,tl-wr841n-v11,tp-link-tl-wr841n-nd-v11))
$(eval $(call GluonModel,TLWR841_REGION,tl-wr841n-v12,tp-link-tl-wr841n-nd-v12))
$(eval $(call GluonProfileFactorySuffix,TLWR841_REGION,-squashfs-factory$(if $(GLUON_REGION),-$(GLUON_REGION)),.bin))

Datei: - openwrt/target/linux/ar71xx/base-files/lib/ar71xx.sh

  ;;

“084100”*)
model=“TP-Link TL-WR841N/ND”

  if [ "$hwid" = '08410002' -a "$mid" = '00000002' ]; then
  	hwver=' v1.5'
  fi
  ;;


;;
*“TL-WR841N/ND v11”)
name=“tl-wr841n-v11”
;;

Könnte mir bitte jemand helfen und zeigen, wie die Ergänzungen/Änderungen der Datei für 8MB/16MB Images bei einem TL-WR841N v.11 und TL-WR841N v.10 in Gluon Version 2016.2.5 aussehen müssten?
Habe ich etwas übersehen?

Vielen Danke für Eure Unterstützung.
Und bitte gnädig sein, da ich blutiger Neueinsteiger in diesem Thema bin.

cu
begin


#4

Hallo begin,

die Images werden schon erzeugt, dann aber durch namensgleiche überschrieben :wink:

Das hat mich auch viel Nerven gekostet, speziell beim V11, wo wir 4MB, 8MB und 16MB Images haben wollten. Man muss dann mehr Profile definieren.

Ich habe die Patches auf github hochgeladen, vielleicht schaust Du da mal rein, es sollte klar werden, was man tun muss. Vor dem Wochenende habe ich wenig Zeit, sonst könnte ich mehr helfen.

Viel Erfolg
Hermann-Josef (bk9050)

P.S.: Ja, die Typangabe hatte einen Typo, 28 (= Parallel-Flash) anstelle von 25 (= SPI-Flash)


#5

Hallo Hermann-Josef,

vielen Dank für die rasche Unterstützung. :+1:

Ja, Danke werde ich tun. Wobei ich nicht allzu viel Hoffnung habe, da ich null Ahnung vom Scripting/Coding habe. Aber ich werde mein bestes versuchen. In die Patch-Geschichte muss ich mich auch erst noch einlesen.

Kein Problem. Ich doktere jetzt schon eine ganze Weile, ohne nennenswerte Erfolge daran herum. Also werden mich einige Tage mehr oder weniger, nicht direkt ins Unglück stürzen.

Noch einmal Danke für deine Hilfe.

cu
begin


#6

Bitte denke auch immer dran, das man sich so ein Sonderling baut, dessen Support wahrscheinlich nie upstream sein wird.

Will man was zukunftsfähiges haben, dann ist der 841er keine Option mehr. Auch und wahrscheinlich eben wegen den 16MB Flash, nicht.


#7

Hallo Tarnatos,

Ja, ich muss dir mittlerweile uneingeschränkt zustimmen. Vielleicht sollte man das auch direkt im ersten Beitrag erwähnen.
Zu Anfang hatte ich noch die Hoffnung, dass Euer Mod “Mainstream” werden könnte.
Und mit den Patches und Scripten von bk9050 wäre man damit auch auf einem guten Weg.
Aber wenn das niemals in Gluon aufgenommen wird, dann …

Korrekt. Meine 841er Geräte sind leider erst 4. bzw. 1. Monat alt.
Die Geräte mit “Zukunft” die ich betreibe, ein WR1043ND-v4 u. ein WR842N-v3 , haben mich nicht so beeindruckt. Doppelt so teuer, schwer zu beschaffen u. eine Unterstützung dafür, die stabil funktioniert hat auch einige Zeit auf sich warten lassen.
Da sind die 841er schon robuster u. im Vorteil, besonders bei schwierigen Einbau- u. Empfangslagen. Da habt Ihr nun auch schon ewig dran herum optimiert und jeden Winkel erforscht.

Euer Mod ist preiswert (unter 10,- €) wenn man die Handwerkzeuge schon besitzt. Daher wollte ich es einfach ausprobieren. Nenne es von mir aus Forscherdrang. War vorher mit Flasher, SPI Chips, u-boot, ART, Gluon kompilieren vorher noch nie in Berührung gekommen.
Denn eigentlich kann man den ganzen Billig-TP-Link-Routerkram, im Zeitalter von Dual-Band, Multi-MiMo, Annex-J, Vectoring, Kabel- u. FTTH Anschlüssen. Provider-Zwangs-HotSpots eh’ für nichts mehr sinnvoll verwenden, außer für Freifunk.

cu
begin


#8

@begin, der Archer C25 hat Dualband und wird in Zukunft von Gluon unterstützt werden, nur so zur Information :wink:


#9

Wie funktioniert das denn nun?
Wäre es nicht nach wie vor besser, dem Router eine -zu definierende- eigene HW-ID zu geben?
Also entweder einen 841er mit extrem hoher Nummer (sind ja immerhin 4 Stellen frei).

Oder -falls das unerwünscht ist- eben das TP-Link in etwas anderes zu ändern (a la “BMW->Alpina”, falls befürchtet wird, man könnte mit “Umdefininitionen im TP-Link-Numberspace” die Rechte von TP-Link verletzen/einschränken oder zumindest unwahrscheinliche Kollisionen in Kauf nehmen).

Zumal man mit einer neuen Manufacturer-ID keine vorhandenen Profiledateien patchen, sondern schlicht ein weiteres Profil nur “dazunehmen” könnte. (Ja, bleibt ein Patch, aber einer, der nicht mitten im “fremden” Namespace passiert.)


TL-WA901ND zerflashed / ART-Partition beschädigt ("total kaputt")
#10

Das wird doch gemacht! Schau bitte nochmal genau hin.


#11

Kannst Du mir helfen, wo im Posting ich schauen sollte wo die HW-ID geändert wird?


#12

Klar! Direkt oben im ersten Posting habe ich es erklärt.

Habs dir nochmal rauskopiert.


#13

Ich war davon ausgegangen, dass sich das nur auf den Build-Vorgang für’s das Image bezieht.

Das Kommando gebe ich auf der neuen Uboot-Konsole ein, um die HW-ID zu ändern?


#14

Ob es auch auf der Konsole geht, weiß ich nicht.

Die von mir rauskopierten Textpassagen bezogen sich auch den Gluon Build Prozess.

Hier:

Wird beschrieben wie man es direkt in der mtd0 Partition des Images mit einem HEX Editor ändert.


#15

Ach, das ist auch die HWID. Ich dachte, dass wäre die Info für den Bootloader.

Anway, mein Vorschlag war ja, etwas sparsamer mit den Resourcen umzugehen. (zumal die Bestückungen mit einiger Sicherheit 4^n MByte sein werden, also 6, 7 oder 12MB eher unwahrscheinlich sein werden in Zukunft.


#16

Du mach doch, ist doch ein Wiki!


#17

Hallo,

möchte Rückmeldung zu meinen “Experimenten” geben.

Die ID des Router Modell hatte ich mit einem Hex-Editor zuerst im original mtd0.bin / u-boot_mod nach Tarnatos Vorschlag angepasst, bevor ich diesen mit dem Flasher auf den 16MB Winbond SPI Chip geschrieben habe.

Das sieht dann auf der seriellen Konsole so aus:


  • U-Boot 1.1.4-0c183583-clean     *
    
  •      Build: 2017-05-10          *
    

BOARD: TP-Link TL-WR841N/D v11
SOC: QCA953x ver. 2 rev. 0
CPU: MIPS 24Kc
RAM: 32 MB DDR1 16-bit CL3-3-3-8
FLASH: 16 MB Winbond W25Q128
MAC: 18:A6:F7:xx:xx:xx
CLOCKS: CPU/RAM/AHB/SPI/REF
650/400/200/ 25/ 25 MHz

u-boot> printmodel

Router model stored in FLASH at offset 0x9F01FD00: 0841161100000001

Die Vorlage des Patches von bk9050 selber zu integrieren, habe ich erwartungsgemäß nicht hinbekommen.
Aber auf github liegt auch ein Build-Script von ihm, dass ich soweit anpassen konnte, mit Hilfe dessen ich die für mich passende “site” der Community einbinden konnte.

Nach 3 Stunden Durchlauf wurden die zusätzlichen Images erstellt:

*tp-link-tl-wr841n-nd-v11-16mb-sysupgrade.bin
*tp-link-tl-wr841n-nd-v11-8mb-sysupgrade.bin
*tp-link-tl-wr841n-nd-v12-8mb-sysupgrade.bin
*tp-link-tl-wr841n-nd-v9-8mb-sysupgrade.bin

Done!

Start: 2017-05-20T16:32+02:00
Stop: 2017-05-20T19:25+02:00

Soweit ich es gesehen habe, werden zur Zeit in zwei Durchläufen noch nicht alle möglichen Images für 841er gebaut, Da müsste noch einmal die fähiger Köpfe ran. Aber das von mir benötigte “tp-link-tl-wr841n-nd-v11-16mb-sysupgrade.bin” war dabei.

Vorher erstellten passenden pepe2k “u-boot_mod” + “modifizierte Router-ID” auf den Flash Chip geschrieben, eingelötet, ART Partionon per u-boot Web-Interface wieder hergestellt und das Image “tp-link-tl-wr841n-nd-v11-16mb-sysupgrade.bin” ebenfalls per Web-Interface geflasht.

Router getestet, Mesh-VPN, Mesh, Client-Verbindung, SSH geht.
Wunderbar! Vielen Dank an alle Beteiligten für die Hilfe und Unterstützung.

Aber wie von Tarnatos völlig korrekt angemerkt, haben wir jetzt einen “Sonderling” gebaut.
Durch persönliches Unvermögen, passte jetzt der Versions-String nicht zu dem der verwendeten Community, sodass einige “opkg update” nicht geladen werden konnten. Konnte ich zwar mit einigen Basteleien wieder hinbiegen, aber mir ist aufgefallen, dass einige via opkg installierte Pakete nicht korrekt funktionieren.

Heißt, die ganze Sache macht nur wirklich Sinn, wenn die von euch präferierte Community auch diesen Mod letztendlich unterstützt und entsprechende sysupgrade Images baut. Sonst wird das auf lange Sicht nichts, vor allem in Hinblick auf anstehende Autoupdates, 802.11s Umstellung, Migration zu LEDE Projekt.

cu
begin


#18

Daher meine dringende Bitte, das mit der HW-ID/BoardID so zu machen, dass es nicht nur technisch funktioniert, sondern auch Upstream zu Gluon gehen kann. Also den kritischen Blicken von Neoraider&Co standhält.
Ansonsten bringt es nämlich wirklich nichts.


#19

Nochmal und letztmalig,

die HW ID wurde angepasst und ist unique. Wie das geht ist oben beschrieben!

Wenn das besser, anders oder sinnvoller geht, dann nicht reden MACHEN! Der Betrag oben ist ein Wiki, jeder kann ihn editieren.


#20

Das Gluon-Git ist kein Wiki.

Es geht darum, eine Lösung zu finden, um die Umrüstungen im größeren Stil “auf Events” durchzuführen.
(und dass die Leute das dann auch nutzen können, dauerhaft)