Routery TP-Link w końcu otrzymały automatyczny tryb firmware recovery w U-Boot
Dodano: Sobota, 21 września 2013, godzina 22:19:38Kategoria: Poradniki
Do tej pory jedynym znanym przeze mnie routerem TP-Link, który fabrycznie wyposażony był w prosty tryb ratunkowy, umożliwiający ponowne wgranie firmware przy pomocy TFTP w U-Boot, był model TL-WR842ND. Jakiś czas temu, przy okazji przeglądania źródeł z TP-Link GPL Code Center dla jednego z najnowszych modeli - TP-Link TL-WR710N(EU) v1, natknąłem się na fragment kodu, który realizował taką funkcjonalność (zobacz mój post na forum OpenRouter). Niedługo potem, na forum eko.one.pl w jednym z wątków pojawiła się informacja o tym, że tryb ten został odkryty w najnowszych, rosyjskojęzycznych wersjach oficjalnego oprogramowania TP-Link dla modeli TL-WDR3600, TL-WDR4300 i innych (z braku dostępu do wszystkich modeli byłem w stanie sprawdzić jedynie niektóre z nich). Co jeszcze ciekawsze, ta sama funkcjonalność została po cichu przemycona, bez żadnej informacji na liście zmian, również i do polskiej wersji firmware, na razie dla modelu TL-WDR4300.
W dalszej części tego wpisu pokazuję, krok po kroku, jak można “zaopatrzyć się” w wersję U-Boot zawierającą ten tryb oraz jak go używać. Na końcu wpisu znajdziecie również listę routerów oraz wersji oryginalnego oprogramowania, w którym znajduje się opisywany tryb ratunkowy. Przy okazji, bardziej zaawansowanym użytkownikom, polecam moją modyfikację U-Boot dla routerów, dostępną w GitHub.
Kilka uwag na początek
TP-Link publikuje aktualizacje oprogramowania (firmware) w dwóch wersjach - zawierające dwa obrazy w jednym pliku (obraz firmware oraz obraz U-Boot) lub zawierające wyłącznie obraz firmware. Na nasze szczęście, producent w nazwie pliku umieszcza informację o tym (słowo kluczowe w nazwie to “boot”), czy zawiera on również obraz U-Boot. Przykładowo, dwa ostatnie, w chwili pisania tego tekstu, aktualizacje firmware dla TL-WDR4300 z polskiej strony zawierały pliki nazwane odpowiednio:
- wdr4300v1_en_3_13_33_up_boot(130617).bin (plik zawiera obraz firmware oraz obraz U-Boot)
- wdr4300v1_en_3_13_31_up(130319).bin (plik zawiera wyłącznie obraz firmware)
Tak jest na pewno z obrazami publikowanymi przez polski i inne europejskie oddziały TP-Link. Należy uważać w przypadku wgrywania oryginalnego oprogramowania ze stron chińskich - tam powyższa zasada nazywania plików nie jest regułą.
Drugą, zdecydowanie pewniejszą metodą sprawdzenia czy plik zawiera, poza obrazem firmware, również obraz bootloadera jest wykorzystanie dowolnego edytora HEX. Wystarczy przy jego pomocy przeszukać plik (w trybie tekstowym) pod kątem frazy “U-Boot 1.1.4″. Wynik pozytywny, jak na poniższym zrzucie ekranu, świadczy o zawartości obrazu U-Boot w pliku z aktualizacją oprogramowania:
Ewentualnie, osoby bardziej obeznane w temacie, mogą sprawdzić czy plik zawiera dwa nagłówki (TP-Link stosuje własne nagłówki o rozmiarze 200 bajtów, a ich strukturę, poza oficjalnymi źródłami, można sprawdzić też np. w moim repozytorium zmodyfikowanej wersji U-Boot).
Jeżeli korzystacie aktualnie na routerze z jakiegoś alternatywnego oprogramowania, np. OpenWrt lub Gargoyle, to pod żadnym pozorem nie wolno Wam wgrywać oryginalnego oprogramowania TP-Link zawierającego w pliku również obraz U-Boot! Taka operacja zawsze zakończy się uszkodzeniem routera (na szczęście odwracalnym i w gruncie rzeczy niegroźnym, ale do naprawy wymagającym otwarcia urządzenia i podłączenia się do konsoli szeregowej). Po takim zabiegu router nie uruchomi się już ponownie i będzie się w kółko restartować.
Zasada przy powrocie z OpenWrt/Gargoyle do oryginalnego oprogramowania jest prosta - wgrywamy plik zawierający wyłącznie obraz firmware!
Wgrywamy (na przykładzie TL-WDR4300)
Posiadacze modelu TL-WDR4300 mają sprawę w pewnym sensie ułatwioną, ponieważ firmware z trybem recovery znalazł się w ostatniej, w chwili pisania tego tekstu, oficjalnej aktualizacji w języku polskim, oznaczonej: TL-WDR4300_V1_130617. Wystarczy wgrać tę wersję, oczywiście TYLKO I WYŁĄCZNIE z poziomu oryginalnego oprogramowania (ze względu na zawartość obrazów firmware i U-Boot w pliku).
Jeżeli na routerze zainstalowane macie aktualnie alternatywne oprogramowanie, to należy wykonać trochę więcej kroków, kolejno:
- wrócić do oprogramowania oficjalnego, np. wykorzystując wersję TL-WDR4300_V1_130319 lub obraz dostępny na stronie eko.one.pl
- wykonać z poziomu oryginalnego oprogramowania aktualizację do wersji TL-WDR4300_V1_130617
- wgrać ponownie alternatywne oprogramowanie
Jeżeli używacie innego modelu, np. TL-WDR3600, to procedura będzie podobna, ale ze względu na brak (na razie?) trybu recovery w ostatnich aktualizacjach na polskiej stronie, trzeba sięgnąć po rosyjskojęzyczną wersję oprogramowania w wersji TL-WDR3600_V1_130527_RU. I tak jak w przypadku TL-WDR4300, jeżeli korzystacie z alternatywnego oprogramowania, najpierw należy wykonać powrót do wersji oficjalnej przy pomocy pliku bez obrazu U-Boot (np. ze strony eko.one.pl) i dopiero wtedy wgrać wersję rosyjskojęzyczną. Użytkownicy oryginalnego oprogramowania mogą oczywiście od razu, z jego poziomu, wgrać aktualizację zawierającą obraz firmware oraz U-Boot w jednym pliku.
Jeżeli ktoś ma trudności z językiem rosyjskim, to strona do aktualizacji oprogramowania znajduje się na 3 pozycji w ostatnim menu (plik /userRpm/SoftwareUpgradeRpm.htm).
Używamy
Opisywany tryb recovery wykorzystuje po stronie routera klienta TFTP (IP routera: 192.168.0.86), który próbuje w nieskończoność (żeby przerwać ten tryb bez dostępu do konsoli szeregowej należy po prostu odłączyć zasilanie), z serwera TFTP pracującego na IP 192.168.0.66, pobrać plik o konkretnej nazwie (patrz niżej). Żeby wejść w tryb recovery należy podczas uruchamiania routera (od razu po podłączeniu do prądu) wcisnąć i przytrzymać przycisk WPS/Reset (lub Reset w przypadku innych urządzeń).
Urządzenie w żaden sposób nie informuje niestety o wejściu w tryb recovery i nie odpowiada też na ICMP Echo Request czyli tzw. ping. Jedyny sposób na sprawdzenie, czy router oczekuje na połączenie z serwerem TFTP, to podejrzenie transmisji na karcie sieciowej, np. przy pomocy oprogramowania Wireshark.
Oczywiście, przed samym uruchomieniem routera i wejściem w tryb recovery, należy podłączyć go kablem sieciowym z komputerem, skonfigurować adres IP karty sieciowej oraz uruchomić serwer TFTP:
- IP: 192.168.0.66
- Maska: 255.255.255.0
- Nazwa pliku: wdr4300v1_tp_recovery.bin, wdr3600v1_tp_recovery.bin lub inna, w zależności od modelu (nazwę można rozszyfrować np. podglądając przy pomocy Wireshark odpowiedni pakiet z zapytaniem - patrz niżej)
Przykładowy zrzut z konsoli szeregowej całego procesu wgrywania oprogramowania przy pomocy trybu ratunkowego poniżej (na przykładzie modelu TP-Link TL-WDR3600):
U-Boot 1.1.4 (May 27 2013 - 16:15:39) U-boot DB120 DRAM: 128 MB id read 0x100000ff flash size 8MB, sector count = 128 Flash: 8 MB Using default environment PCIe Reset OK!!!!!! In: serial Out: serial Err: serial Net: ag934x_enet_initialize... No valid address in Flash. Using fixed address wasp reset mask:c03300 WASP ----> S17 PHY * : cfg1 0x7 cfg2 0x7114 eth0: ba:be:fa:ce:08:41 athrs17_reg_init: complete eth0 up eth0 dup 1 speed 1000 Using eth0 device TFTP from server 192.168.0.66; our IP address is 192.168.0.86 Filename 'wdr3600v1_tp_recovery.bin'. Load address: 0x80060000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ############################ done Bytes transferred = 8126464 (7c0000 hex) original_product_id = 36000001 original_product_ver = 01 recovery_product_id = 36000001 recovery_product_ver = 01 auto update firmware: product id verify sucess! First 0x2 last 0x7d sector size 0x10000 125 Erased 124 sectors Copy to Flash... write addr: 9f020000 done
Po prawidłowym wgraniu obrazu nastąpi restart routera i próba załadowania nowego oprogramowania. W przypadku niepowodzenia (np. po wgraniu złego obrazu), router będzie kontynuować bootowanie znajdującego się we FLASH systemu.
Modele z trybem recovery
Poniżej zamieszczam listę wersji oryginalnego oprogramowania TP-Link, w których pojawił się opisywany tryb recovery. Wszystkie poniższe wersje zostały przeze mnie sprawdzone na wymienionych urządzeniach - stan na dzień 21.09.2013:
- TL-WDR4300: TL-WDR4300_V1_130617 (PL)
- TL-WDR3600: TL-WDR3600_V1_130527_RU (RU)
- TL-MR3020: TL-MR3020_V1_130507_RU (RU)
- TL-MR3220 v2: TL-MR3220_V2_130607_RU (RU)
Prawdopodobnie ten tryb trafił do znacznie liczniejszej grupy urządzeń TP-Link, na przełomie maja i czerwca tego roku. Jeżeli posiadacie jakiś inny model niż wymieniony powyżej i na rosyjskojęzycznej stronie wsparcia TP-Link znajduje się dla niego plik aktualizacji z tego okresu, zawierający obraz U-Boot, to warto go wgrać (oczywiście z poziomu innej oryginalnej wersji oprogramowania!) i sprawdzić!
Kilka uwag na koniec
Jak wynika z zamieszczonego powyżej zrzutu z konsoli, tryb ten posiada prostą weryfikację wgrywanego obrazu (sprawdzeniu podlega nagłówek obrazu). Jest to zabezpieczenie przed wgraniem obrazu przeznaczonego dla innego modelu. Oczywiście, możliwe jest wgranie przy pomocy tego trybu obrazów OpenWrt/Gargoyle, ponieważ one również wyposażone są w odpowiedni nagłówek. I co więcej, nie ma znaczenia czy będzie to plik factory, czy sysupgrade.
Należy pamiętać jedynie o kilku sprawach. Przede wszystkim, tryb ten nie obsługuje plików zawierających obrazy firmware i U-Boot. Należy wgrywać plik zawierający wyłącznie obraz firmware (czyli stosujemy taką samą zasadę jak przy powrocie do oryginalnego oprogramowania z OpenWrt/Gargoyle). Ponadto, przed wykonaniem aktualizacji do nowej wersji oryginalnego firmware, jeżeli plik zawiera obraz U-Boot, warto upewnić się wcześniej czy tryb ten nie został z niego usunięty i ewentualnie wyciąć z pliku aktualizacyjnego obraz U-Boot wraz z jego nagłówkiem.
» Podobne wpisy (według tagów)
» Tagi dla tego wpisu:
bootloader • recovery • router • TFTP • TL-WDR3600 • TL-WDR4300 • TP-Link • U-Boot
» komentarzy: 5 «
Dodany: Niedziela, 22 września 2013 o godzinie: 13:01:19
[...] Więcej informacji o tym jak się zaopatrzyć w ten tryb i jak go używać znajdziecie w moim krótkim artykule pt. Routery TP-Link w końcu otrzymały automatyczny tryb firmware recovery w U-Boot. [...]
Dodany: Niedziela, 17 listopada 2013 o godzinie: 23:53:20
Super!
Mam tylko jedno pytanie:
Mam wgrany OpenWRT AA. Czy jestem w stanie bez podłączania się kablami do konsoli sprawdzić wersję swojego u-boot’a?
Dodany: Poniedziałek, 18 listopada 2013 o godzinie: 00:06:32
Tak, zrzuć sobie partycję z U-Bootem i przejrzyj plik w jakimś edytorze HEX.
Dodany: Poniedziałek, 18 listopada 2013 o godzinie: 01:21:02
Dzięki!
Zrzut partycji u-boot’a do pliku (może się komuś przyda):
dd if=/dev/$(grep ‘”u-boot”‘ /proc/mtd |cut -c 1-4) of=/tmp/uboot.backup
Dodany: Czwartek, 26 lutego 2015 o godzinie: 11:24:19
Bełkot.
Dla laika ten opis to bełkot, a szkoda. Czuć przez skórę, że treść jest cenna.
» dodaj komentarz «