Recovery

Aus Freifunk Dresden - Anwender-Wiki
Version vom 17. April 2016, 19:15 Uhr von Stephan (Diskussion | Beiträge) (Nanostation Loco M2)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Ubiquiti Nanostation M Loco M2

Recovery via Serial Port

Durch aktuellere original Firmware Versionen, kann neben dem Update der Firmware auch der Bootloader aktualisiert werden.

Die bisher lang verwendete Firmware Version für diesen Router war zum Beispiel XM.v5.5.11.28002.150723.1344.bin (www.ubnt.com). In dieser Firmware ist der u-boot U-Boot 1.1.4.2-s594 (Dec 5 2012 - 15:23:07) enthalten.

Original Partitionstabelle für airOS Version 5.5.xxx
device nor0 <ar7240-nor0>, # parts = 6
#: name                        size            offset          mask_flags
0: u-boot                      0x00040000      0x00000000      0
1: u-boot-env                  0x00010000      0x00040000      0
2: kernel                      0x00100000      0x00050000      0
3: rootfs                      0x00660000      0x00150000      0
4: cfg                         0x00040000      0x007b0000      0
5: EEPROM                      0x00010000      0x007f0000      0

Bei einem Update auf die neuere Firmware airOS for XM board firmware v5.6.4 wird auch der Bootloader aktualisiert und irgendwas am Flashlayout (Partionstabelle) geändert. Das Aufspielen einer Firmware, basierend auf openwrt, kann den Router vorerst unbrauchbar machen.

Openwrt generierte Partitionstabelle:
device nor0 <ar7240-nor0>, # parts = 6
#: name                        size            offset          mask_flags
0: u-boot                      0x00040000      0x00000000      0
1: u-boot-env                  0x00010000      0x00040000      0
2: kernel                      0x00100000      0x00050000      0
3: rootfs                      0x005a0000      0x00150000      0
4: cfg                         0x00040000      0x006f0000      0
5: EEPROM                      0x00010000      0x00730000      0

Soweit ich erkennen konnte, stimmen die Partitionstabelle im Flash nicht mit dem in der U-Boot Environment gespeicherten Tabelle überein. Dadurch kann der Bootloader das Image nicht mehr laden.

U-Boot Environment
mtdparts: mtdparts=ar7240-nor0:256k(u-boot),64k(u-boot-env),1024k(kernel),6528k(rootfs),256k(cfg),64k(EEPROM)

Die Partionstabelle sollte eigentlich wie die originale Tabelle aussehen.

Es war zwar möglich, die aktuellste Firmware zu flaschen aber der bootloader startete diese nur wenn man in der seriellen Console die Partitionstabelle auf die default-Werte setzte. Leider wurden diese aber nicht permanent gespeichert, schienen aber aktiv zu bleiben.

mtdparts defaults
boot

Das airOS bootet, aber es wurden keine neue Firmwareimages angenommen. Nach einem Ausschalten und erneuten Einschalten des Routers, wurde wieder die falsche Partitionstabelle verwendet und der Router bootete nicht.

Die einzige Lösung die ich gefunden habe ist, auf den alten U-Boot zu wechseln und dann anschliessend die Freifunk Firmware via U-Boot zu flashen. U-Boot besitzt einen Rescue-Mode, welcher durch Drücken und Halten des Resetschalters und anschliessenden Power-On und weiter gedrücktem Resetschalter für mehr als 10s, aktiviert werden kann. Allerdings erlaubt dieser Mode nicht das ersetzten des Bootloaders (U-Boot). Dazu muss über eine Serielle Console der Rescue-Mode mit dem Parameter "-f" gestartet werden.

U-Boot 1.1.4.2-s956 (Jun 10 2015 - 10:54:50)

DRAM:  32 MB
Flash:  8 MB
PCIe WLAN Module found (#1).
Net:   eth0, eth1
Board: Ubiquiti Networks XM board (rev 1.2 e0a2)
Hit any key to stop autoboot:  0 
ar7240>
ar7240> urescue -f
Boot loader overwrite mode
Setting default IP 192.168.1.20
Starting TFTP server...
Using eth0 (192.168.1.20), address: 0x81000000
Waiting for connection: |

Auf dem PC wird mit tftp die ältere originale Firmware (XM.v5.5.11.28002.150723.1344.bin) an den Router geschickt.

$ tftp 192.168.1.20
tftp> bin
tftp> put XM.v5.5.11.28002.150723.1344.bin
tftp> quit

Auf der Seriellen Console erscheinen folgende Ausgaben:

Receiving file from 192.168.1.31:39613
Received 6896662 bytes
Firmware Version: XM.ar7240.v5.5.11.28002.150723.1344
Setting U-Boot environment variables
Un-Protected 1 sectors
Erasing Flash.... done
Erased 1 sectors
Writing to Flash... done
Protected 1 sectors
Copying partition 'u-boot' to flash memory: 

First 0x0 last 0x3 sector size 0x10000
.... done
write addr: 9f000000
Copying partition 'kernel' to flash memory:

First 0x5 last 0x14 sector size 0x10000
................ done
write addr: 9f050000
Copying partition 'rootfs' to flash memory:

First 0x15 last 0x7a sector size 0x10000
...................................................................................................... done
write addr: 9f150000

Firmware update complete.

Resetting...

U-Boot 1.1.4.2-s594 (Dec  5 2012 - 15:23:07)

Der alte U-Boot ist somit wieder vorhanden. Da die originale Firmware aber trotzdem nicht startete, habe ich die nun die Freifunk-Firmware aufgespielt. Dieses mal wurde urescue ohne den Parameter -f aufgerufen um sicher zu sein, dass der U-Boot nicht zerstört wird.

U-Boot 1.1.4.2-s594 (Dec  5 2012 - 15:23:07)

Board: Ubiquiti Networks XM board (rev 1.2 e0a2)
DRAM:  32 MB
Flash:  8 MB
PCIe WLAN Module found (#1).
Net:   eth0, eth1
Hit any key to stop autoboot:  0 
ar7240> urescue
Setting default IP 192.168.1.20
Starting TFTP server...
Using eth0 (192.168.1.20), address: 0x81000000
Waiting for connection: \
Auf PC dann folgendes eingegeben:
$ tftp 192.168.1.20
tftp> bin
tftp> put openwrt-ar71xx-generic-ubnt-nano-m-squashfs-factory.bin
tftp> 

Der Bootloader zeigt folgende Ausschriften:

Receiving file from 192.168.1.31:43110
Received 3604892 bytes
Firmware Version: XM.ar7240.v6.0.0-OpenWrt-r48246
Setting U-Boot environment variables
Un-Protected 1 sectors
Erasing Flash.... done
Erased 1 sectors
Writing to Flash... done
Protected 1 sectors
Copying partition 'kernel' to flash memory:

erasing range 0x9F050000..0x9F14FFFF: ................ done

Erased 16 sectors

writing to address 0x9f050000, length 0x00100000 ...

Copying partition 'rootfs' to flash memory:

erasing range 0x9F150000..0x9F3CFFFF: ........................................ done

Erased 40 sectors

writing to address 0x9f150000, length 0x00280000 ...

Firmware update complete.

Resetting...

Danach startete die Freifunk Firmware.