Naprawa bootloadera w TD-W8970v1

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