Recovery
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 U-Boot 1.1.4.2-s956 (Jun 10 2015 - 10:54:50) 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, stimmt 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 default 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.