Recovery-UBoot
Inhaltsverzeichnis
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.