Recovery-UBoot

Aus Freifunk Dresden - Anwender-Wiki
Version vom 22. Januar 2022, 20:05 Uhr von Stephan (Diskussion | Beiträge) (sysupgrade)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Einleitung

Jeder Router hat einen Loader, meist UBoot. Über diesen kann man alternative ebenso seinen Router retten.< br/> Dazu ist aber eine Serielle Konsole notwendig, die die meisten Router nur auf der Leiterplatte haben (manche sogar garnicht).
Eine Anleitung zum Öffnen und Verbinden eines Seriellen-Usb-Adapters ist routerabhängig.

Achtung: KEINE direkte Verbindung vom Serial-Port vom PC (oder USB-Serial-Adapter) !!!
         ---> Zerstörung des Routers möglich !

Die Serielle Schnittstelle am PC oder im USB-Serial-Adapter haben zu hohe Spannungen, welche von -15V (für low) und +15V (high) reichen.

Es gibt aber USB Adapter, die für low 0V und high 3.3V liefern. Nur diese dürfen verwendet werden.
Kennt man die Belegung der seriellen Schnittstelle nicht, so muss man einfach probieren.

tftp

Damit der UBoot ein kernel image vom PC laden kann, muss dort ein tftp server laufen.
Je nach Installation gibt es ein Verzeichniss, wo die Images hinkopiert werden müssen, damit der tftp-server diese findet. ggf müssen diese umbenannt werden.

Im Beispiel für Netgear 6220 kann man einen laufenden Server stoppen und manuell starten, falls UBoot den tftp-server nicht findet.

computer $ killall -9 in.tftpd
computer $ in.tftpd -lL --secure --address 192.168.1.123:69 /var/lib/tftpboot

Das kernel image muss nach /var/lib/tftpboot kopiert und evt umbenannt werden, damit UBoot dieses findet.

computer $ cp openwrt-ramips-mt7621-netgear_r6220-initramfs-kernel.bin /var/lib/tftpboot/kernel.bin

Uboot

Funktioniert die serielle Konsole, kann der UBoot meist mit "Ctrl-C" gleich nach dem Start/Boot aktiviert werden. Man erhält einen Prompt.

Uboot besitzt eine Hilfe zu den unterstützen Kommandos

# help

Anzeige IP Adressen,

# printenv
bootcmd=tftp
bootdelay=1
baudrate=57600
ethaddr="00:C0:02:12:35:88"
ipaddr=192.168.1.1
serverip=192.168.1.123
stdin=serial
stdout=serial
stderr=serial

Anpassen und Speichern von IP Adressen, wenn notwendig.

# setenv <variable> <wert>
# saveenv

Wenn der Kernel kaputt ist und der Router nicht mehr startet, um eine Firmware zu installieren, kann man das kernel image via tftp in den Speicher laden und direkt aus UBoot starten.
Wenn das funktioniert, kann man via ssh und sysupgrade die freifunk-firmware (openwrt) installieren.

tftpboot verwendet die serverip, um sich mit einem tftp-server (port 69) zu verbinden. Wurde kein Filename konfiguriert, so wird dieser angezeigt.

# tftpboot

*** Warning: no boot file name; using 'test.bin'
TFTP from server 192.168.1.123; our IP address is 192.168.1.1
Filename 'test.bin'.

 TIMEOUT_COUNT=10,Load address: 0x0
Loading: Got ARP REPLY, set server/gtwy eth addr (20:1a:06:fe:4e:29)
Got it
Got ARP REQUEST, return our IP
T T T checksum bad
T checksum bad
checksum bad
T T T Got ARP REQUEST, return our IP
T T #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 #################################################################
	 ######################
done
Bytes transferred = 7099592 (6c54c8 hex)
NetBootFileXferSize= 006c54c8

Das Kernel.image wurde in den Speicher geladen, wo bei die Adresse via 'printenv' angezeigt werden. Gibt es hier keine Angabe, so findet man die Speicheradresse (was auch die Startadresse ist) normalerweise bei den Ausschriften von `tftpboot` (TIMEOUT_COUNT=10,Load address: 0x80100000)

Der Kernel liegt im RAM und kann direkt gestartet werden.

# bootm 0x80100000

Sysupgrade

Der Router sollte dann starten. Die Daten im Flash sind weiterhin nicht verändert, da nur das kernel-image in den RAM-Speicher geladen und direkt angesprungen wurde.

Auf dem PC muss via scp das sysupgrade image auf den router kopiert werden

computer $ scp openwrt-ramips-mt7621-netgear_r6220-squashfs-sysupgrade.bin root@192.168.1.1:/tmp/
computer $ md5sum openwrt-ramips-mt7621-netgear_r6220-squashfs-sysupgrade.bin

Im router sollte zuerst sichergestellt sein, dass das Image korrekt übertragen wurde.
`md5sum` hier erneut ausführen und die Hash vergleichen.

router $ cd /tmp
router $ md5sum openwrt-ramips-mt7621-netgear_r6220-squashfs-sysupgrade.bin
router $ sysupgrade -n openwrt-ramips-mt7621-netgear_r6220-squashfs-sysupgrade.bin

Der Router richtet jetzt die Firmware komplett neu ein, da eine Konfiguration nicht gespeichert werden konnte.