Tplink

Aus Freifunk Dresden - Anwender-Wiki
Version vom 3. März 2024, 02:18 Uhr von Stephan (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

TL-WR1043ND

Zugriff auf Uboot

  • Verbindung via Serial Port (115200,8,n,1)
  • Gerät neu starten
  • Bootet das Gerät so kommen einige Ausschriften auf der Konsole. Interessant ist die Flashaufteilung, da die Offsets später

beim manuellem Schreiben des Flashes verwendet werden. Die physikalische Adresse des Flashspeichers liegt hier bei diesem Router an 0x9f000000 (Suche nach ## Booting image at ...). Es ist in der Flashaufteilung gut zu erkennen, dass UBoot den Kernel startet.

## Booting image at 9f020000 ...
........
[    0.806670] Creating 5 MTD partitions on "spi0.0":
[    0.811535] 0x000000000000-0x000000020000 : "u-boot"
[    0.818025] 0x000000020000-0x0000001674fc : "kernel"
[    0.824266] 0x0000001674fc-0x0000007f0000 : "rootfs"
[    0.830002] mtd: device 2 (rootfs) set to be root filesystem
[    0.835803] 1 squashfs-split partitions found on MTD device rootfs
[    0.842118] 0x000000490000-0x0000007f0000 : "rootfs_data"
[    0.849820] 0x0000007f0000-0x000000800000 : "art"
[    0.855781] 0x000000020000-0x0000007f0000 : "firmware"
  • Gerät nochmals starten.
  • Sobald "Autobooting in n seconds" erscheint folgendes auf der Konsole eingeben (via Copy&Paste einfügen, da Zeit sehr knapp ist).
tpl <enter>
U-Boot 1.1.4 (Jun 13 2014 - 15:14:01)

ap135 - Scorpion 1.0DRAM:  
sri
Scorpion 1.0
ath_ddr_initial_config(178): (16bit) ddr2 init
tap = 0x00000003
Tap (low, high) = (0x0, 0x1d)
Tap values = (0xe, 0xe, 0xe, 0xe)
64 MB
Flash Manuf Id 0xef, DeviceId0 0x40, DeviceId1 0x17
flash size 8MB, sector count = 128
Flash:  8 MB
Using default environment

*** Warning *** : PCIe WLAN Module not found !!!
*** Warning *** : PCIe WLAN Module not found !!!
In:    serial
Out:   serial
Err:   serial
Net:   ath_gmac_enet_initialize...
athrs_sgmii_res_cal: cal value = 0x1
No valid address in Flash. Using fixed address
No valid address in Flash. Using fixed address
ath_gmac_enet_initialize: reset mask:c02200 
Scorpion  ----> S17 PHY *
athrs17_reg_init: complete
: cfg1 0x80000000 cfg2 0x7114
eth0: ba:be:fa:ce:08:41
eth0 up
athrs17_reg_init_wan done
SGMII in forced mode
athr_gmac_sgmii_setup SGMII done
: cfg1 0x800c0000 cfg2 0x7214
eth1: ba:be:fa:ce:08:41
eth1 up
eth0, eth1
Setting 0x18116290 to 0x50a1a14f
Autobooting in 1 seconds
ap135>


  • printenv - zeigt alle uboot Variablen an.
ap135> printenv
bootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 init=/sbin/init mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env),6336k(rootfs),1408k(uImage),64k(mib0),64k(ART)
bootcmd=bootm 0x9f020000
bootdelay=1
baudrate=115200
ethaddr=0xba:0xbe:0xfa:0xce:0x08:0x41
dir=
lu=tftp 0x80060000 ${dir}u-boot.bin&&erase 0x9f000000 +$filesize&&cp.b $fileaddr 0x9f000000 $filesize
lf=tftp 0x80060000 ${dir}ap135${bc}-jffs2&&erase 0x9f050000 +0x630000&&cp.b $fileaddr 0x9f050000 $filesize
lk=tftp 0x80060000 ${dir}vmlinux${bc}.lzma.uImage&&erase 0x9f680000 +$filesize&&cp.b $fileaddr 0x9f680000 $filesize
stdin=serial
stdout=serial
stderr=serial
ethact=eth0
filesize=680004
fileaddr=F
ipaddr=192.168.1.111
serverip=192.168.1.31
  • setenv - Wenn nötig können die Server/Client IP angepasst werden. Hier im Beispiel hat der PC die 192.168.1.31
setenv serverip 192.168.1.31
  • Auf dem PC sollten in verschiedenen Terminals (nicht die serielle Konsole) zwei Programme gestartet werden. tftpd lauscht auf der angegebenen IP und liefert auf Anfrage, die unter /var/lib/tftpboot abgelegten Files and den tftp-client (Router)
 Terminal 1: in.tftpd -lL --secure --address 192.168.1.31:69 /var/lib/tftpboot
 Terminal 2: tcpdump -tni any port 69
  • In der seriellen Konsole kann mit tftp ein File/image an eine RAM Adresse im Router geladen werden. Um eine gute Adresse zu finden, die nicht gerade vom Uboot selbst verwendet wird, kann man sich die Ausgabe von printenv ansehen. Dort findet man oft vordefinierte Befehle. Hier im Beispiel sind 3 Variablen lu,lf,lk definiert. Diese enthalten schon Befehle, um via tftp
    • Uboot
    • Kernel
    • Filesystem

zu laden. Da es den Befehl run scheinbar nicht in allen UBoot Varianten gibt, müssen die Befehle (lk und lf) manuell durchgeführt werden.
Dabei aber trotzdem prüfen, ob die Adressen dem Flash-Offset (+Flash Startadresse) entsprechen.

Das "firmware.bin" ist das factory-image
ap135> tftp 0x80060000 firmware.bin
eth1 link down
Using eth0 device
TFTP from server 192.168.1.31; our IP address is 192.168.1.111
Filename 'firmware.bin'.
Load address: 0x80060000
Loading: T #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 ############################
done
Bytes transferred = 3801092 (3a0004 hex)
  • Kernelbereich Flash löschen
    Jetzt wird erstmal soviel für den Kernel gelöscht, dass das gerade heruntergeladene File später geschrieben werden kann.
    Der Befehl erase hat zwei Parameter. Der erste gibt die Flashadresse an (Flashadresse+Offset), der zweite die Länge in HEX aber ohne 0x davor. Die Länge wurde beim Befehl tftp am Ende in Klammern angegeben (oder mit printenv anzeigen lassen). Das '+' bedeutet, dass eine bestimmte Länge gelöscht wird.

Die Kerneladresse ist auch via printenv (bootcmd=bootm 0x9f020000) ablesbar.

ap135> erase 0x9f020000 +3a0004
Erasing flash... 
First 0x2 last 0x3c sector size 0x10000
  60
Erased 59 sectors
ap135> 
  • Kernelbereich schreiben: Mit dem Befehl cp.b (copy byte). cp.b hat drei Parameter: RAM Adresse, Flash-Adresse, und Länge. Die Länge wird auch in Hex angegeben, aber ohne '+'
ap135> cp.b 0x80060000 0x9f020000 0x3a0004
Copy to Flash... write addr: 9f020000
done
ap135> 
  • Router neu starten