Czasami może się zdarzyć że podczas zmiany firmware na Openwrt skasujemy bootloader. Na szczęście ten router posiada specjalny tryb przez który możemy uruchomić bootloader pobrany przez złącze serial, a następnie z poziomu bootloadera zaprogramować flash nowym bootloaderem.
Jeśli skasujemy bootloader w pamięci flash to po restarcie na konsoli zobaczymy tylko:
ROM VER: 1.1.4
CFG 05
Zaczynamy:
Oprócz interfejsu szeregowego będziemy jeszcze potrzebowali:
Putty
Serwer tftp
Plik u-boot.asc - dostępny jest tutaj: https://github.com/mkresin/u-boot/releases lub u-boot.asc (305,3 KB)
Plik u-boot.bin - uboot.bin (128 KB)
Kawałek przewodu z ostrym zakończeniem ( może być to sonda z multimetru)
1.Rozbieramy router i wyjmujemy płytę główną z obudowy.
2.Podłączamy interfejs szeregowy
3.Uruchamiamy putty ustawiając połączenie na nasz port COM.
4.Przykładamy przewód do gnd oraz do lewej strony rezystora R225, punkt jest zaznaczony na zdjęciu poniżej:
5.Włączamy router. Odłączamy kabel od rezystora R225 (już nie będzie więcej potrzebny), W putty pojawi się komunikat:
ROM VER: 1.1.4
CFG 04
UART
6.Musimy teraz wysłać plik do routera. Ja używając Ubuntu wysłałem plik poleceniem (jako root)
cat u-boot.asc > /dev/ttyUSB0
(od tego miejsca instrukcja wygląda podobnie jak wgrywanie openwrt)
W putty zobaczymy postęp ładowania pliku a na koniec bootloader wystartuje.
Oczywiście trzeba przerwać ładowanie systemu naciskając T
U-Boot 2010.06-LANTIQ-v-2.0.40-svn2583 (Oct 26 2012 - 12:15:55)
CLOCK CPU 500M RAM 250M
DRAM: 64 MiB
Using default environment
In: serial
Out: serial
Err: serial
Net: Internal phy(GE) firmware version: 0x841d
vr9 Switch8192 KiB EN25Q64 at 0:3 is now current device
Type "run flash_nfs" to mount root filesystem over NFS
Hit any key to stop autoboot: 0
7.Konfigurujemy bootloader:
Ustawiamy adres IP routera oraz serwera
setenv ipaddr 192.168.1.1
setenv serverip 192.168.1.2
8.Pobieramy bootloader z serwera tftp do pamięci RAM routera:
tftpboot 0x80800000 u-boot.bin
9.Czyścimy obszar pamięci flash gdzie ma się znajdować bootloader
sf erase 0x0 0x20000
10.Wgrywamy bootloader do pamięci flash
sf write 0x80800000 0x0 0x20000
11.Wyłączamy router przyciskiem z tyłu i włączamy ponownie. Jeśli w putty pokaże się:
ROM VER: 1.1.4
CFG 05
DDR autotuning Rev 0.3d
DDR size from 0xa0000000 - 0xa3ffffff
DDR check ok... start booting...
U-Boot 2010.06-LANTIQ-v-2.0.40-svn2583 (Oct 26 2012 - 12:15:55)
CLOCK CPU 500M RAM 250M
DRAM: 64 MiB
Using default environment
In: serial
Out: serial
Err: serial
Net: Internal phy(GE) firmware version: 0x841d
vr9 Switch8192 KiB EN25Q64 at 0:3 is now current device
Type "run flash_nfs" to mount root filesystem over NFS
Hit any key to stop autoboot: 0
oznacza to że bootloader został naprawiony i możemy wgrać openwrt.
Plik u-boot.bin możemy wydobyć z oficjalnego firmware. Można to zrobić za pomocą polecenia:
dd if=TD-W8970v1_0.6.0_2.12_up_boot\(140613\)_2014-06-13_09.17.23.bin of=u-boot.bin bs=512 skip=1 count=256