Wykonywane poniżej operacje zostały przetestowane i wykonane. Nie daję jednak żadnej gwarancji ich prawidłowości, wszelkie operacje wykonujesz na własną odpowiedzialność. Nie biorę
żadnej odpowiedzialności za uszkodzony sprzęt ani przypalone kotlety.
TP-Link naprawa bootloadera, alternatywne oprogramowanie, uboot
Cześć, mam router TP-Linka TP-XXXXX, miga mi dioda YYYY, router nie wstaje.
Cześć, mam router TP-Linka TP-XXXXX, nie mogę się z nim połączyć mimo przywracania ustawień.
Cześć, mam router TP-Linka TP-XXXXX, nie widać go w sieci.
Cześć, mam router TP-Linka TP-XXXXX, brzydko pachnie.
W większości przypadków, większość tego typu problemów(no, może poza ostatnim) można naprawić nadpisując oprogramowanie. Lecz jak to zrobić, gdy nie ma żadnego sposobu na połączenie
się z routerem?!
Zawsze jeszcze pozostaje konsola szeregowa, z której skorzystamy w tym artykule…
Postępujemy zgodnie z tymi krokami, w takiej własnie kolejności:
- rozbieramy router
- lokalizujemy złącza konsoli szeregowej
- lutujemy goldpiny
- nawiązujemy połączenie z routerem
- wgrywamy nowe oprogramowanie:
* z przygotowanego wcześniej serwera tftp
& wgrywamy zmodyfikowany bootloader
- profit.
Jak to zrobić? Pokażę na przykładzie routera TP-Link MR3020.
Zaczynając od początku, trzeba dobrać się do routera. W niektórych przypadkach wystarczy rozkręcić trochę śrubek, w innych trzeba się nieco posiłować. Tutaj najłatwiej nie było,
jednak udało się bez pęknięć.
Najłatwiej będzie zacząć podważać szary plastik po stronie przeciwnej do diód sygnalizujących pracę urządzenia.
Gdy już uda nam się dobrać do wnętrza, ujrzymy płytę główną routera:
Spostrzegawcze oko szybko dojrzy piny konsoli szeregowej:
Teraz łapiemy się za lutownice i lutujemy goldpiny.
UWAGA! Nie wiem, czy trafiły mi się jakieś dwa pechowe modele, ale pady do lutowania strasznie kiepsko łapały spoiwo. Przed lutowaniem warto odtłuścić
zarówno goldpina jak i pad do postawienia lutu.
Goldpiny wlutowane? Wzorowo!
Teraz musimy zaopatrzyć się w pewien bajer. Ten bajer, to w moim przypadków sprytna „przejściówka” USB -> RS232. Ważne, aby mówiła ona w TTL.
Jeżeli Twój komputer wyposażony jest w port szeregowy, konieczna jest przejściówka do konwersji napięć portu RS-232 na standard TTL (często oparte na układzie MAX232, który działa w
porządku).
Swój dynks na USB kupiłem za 17 zł na allegro i spisuje się wspaniale. Oto on:
Złącza, które będziemy wykorzystywać to jedynie TX, RX oraz GND, które podłączamy odpowiednio do portów RX, TX, GND.
RX routera podłączamy do TX portu, a TX routera do RX portu!
W przeciwnym razie, nic nie zobaczymy 🙁 Dla utrzymania stabilnego połączenia na MR3020, warto jeszcze wetknąć na routerze rezystor 10kOhm pomiędzy port
TX i VCC.
Teraz przychodzi czas, na posłuchanie co nasz router ma nam do powiedzenia. Dane z konsoli szeregowej możemy czytać np. za pomocą konsolowego programu screen, lecz poszedłem jednak
na łatwiznę i zdecydowałem się skorzystać z Putty, chociażby z tego powodu, że jest on dostępny na różne platformy oraz ma kilka przydatnych opcji.
Konfiguracja Putty jest bardzo prosta, musimy ustawić:
1 port, na którym działa nasza przejściówka
2 prędkość
3 opcje sprawdzania parzystości i płynność przepływu.
1.Informację tą możemy pozyskać wykonując polecenie „dmesg”. Jeżeli korzystacie z adaptera szeregowego na USB, to bardzo prawdopodobne że będzie to urządzenie /dev/ttyUSBX gdzie X
jest kolejną naturalną liczbą dodatnią, różną w zależności od systemu i konfiguracji.
Jeżeli natomiast korzystacie z portu szeregowego(i koniecznie przejściówki TTL do niego!) to najprawdopodobniej będzie to coś w stylu /dev/ttySX.
Ważna sprawa, jeśli wykonujecie operacje jako zwykły użytkownik, należy nadać mu odpowiednie uprawnienia(zapisu i odczytu) do urządzenia.
-
prędkość z którą komunikuje się mr3020 to 115200 bitów/sekundę, z tego powodu taką właśnie prędkość ustawiłem
-
Dla najlepszego działania konsoli, wyłączyłem parzystośc i kontrolę przepływu.
Z tego powodu moje ustawienia wyglądają własnie tak:
Bierzmy się zatem do pracy!
Dynks na USB podłączony, uprawnienia nadane poprawnie, kabelki dobrze podłączone (RX do TX, TX do RX, masa do masy), Putty skonfigurowane poprawnie.
Klikamy „Open”
Jejku jejku! Nic się nie dzieje! Amen! Kaput! Po ptakach!
I w tym momencie podłączamy kabelek USB -> mini USB do prądu.
Źródło prądu musi być wystarczające. Podłączmy kabel który dostaliśmy z routerem do dwóch portów USB w komputerze, bądź skorzystajmy z dołączonej
ładowarki
I na ekranie dzieją się cuda. Jakieś literki, cyferki, wszystko leci tak szybko i… się zatrzymało.
Gdzie jest ten bootloader, do którego miałem się dostać?
Odłącz zasilanie, nie zamykaj Putty. Od razu po podłączeniu ponownym zasilania, wpisz w Putty
tpl
To proste polecenie przeniesie Cię wprost do upragnionego bootloadera, o czym poinformowany zostaniesz stosownym promptem:
hornet>
Huuuraaa!
Tak tak, ale jesteśmy dopiero w połowie pracy 😉
Konfiguracja serwera TFTP
Uznałem, że najlepiej do tego celu spisze się prosty, lecz skuteczny dnsmasq.
Na Debianie, i systemach debianopodobnych instalujemy go bardzo prosto:
apt-get install dnsmasq
pozostała jeszcze tylko kwestia konfiguracji, która również nie jest niczym strasznym 😉
dnsmasq.conf
port=0 interface=eth0 bind-interfaces enable-tftp tftp-root=/tmp/tftp
W podanym wyżej configu jako folder tftp podałem /tmp/tftp. To właśnie tam musimy skopiować bootloader który nas interesuje.
Proponuję uruchomienie dnsmasq z parametrem -d umożliwiającym podglądanie nam co się dokładnie dzieje 😉
Jak widać, serwer DHCP jest wyłączony. A to dla tego, że adresy nadamy sobie ręcznie 🙂
ip link set eth0 up ip addr add 192.168.1.2/24 dev eth0
Zwróć szczególną uwagę na maskę podsieci.
Osobiście, pozwoliłem sobie wgrać zmodyfikowany bootloader który
posiada kilka ciekawych funkcji opisanych w swoim readme.
Pobieramy paczkę, rozpakowujemy i interesujący nas obraz kopiujemy do /tmp/tftp. Dla uproszczenia możemy go nazwać uboot.bin.
Ważne, abyśmy przy kopiowaniu obrazu nie pomylili się. Kopiujmy tylko obraz dla naszego routera.
No to lecim.
Router łączymy dobrym i sprawnym kablem z naszym komputerem.
Wracamy do Putty. Jako, że adresy ustawiamy sobie ręcznie, musimy ustawić je również na routerze:
W tym przykładzie adres serwera tftp to: 192.168.1.2
adres routera: 192.168.1.1
hornet> setenv ipaddr 192.168.1.1 hornet> setenv serverip 192.168.1.2 hornet> printenv bootargs=console=ttyS0,115200 root=31:02 rootfstype=squashfs init=/sbin/init mtdparts=ar7240-nor0:256k(u-boot),64k(u-boot-env),2752k(rootfs),896k(uImage),64k(NVRAM),64k(ART) bootcmd=bootm 0x9f020000 bootdelay=1 baudrate=115200 ethaddr=#WYEDYTOWANO stdin=serial stdout=serial stderr=serial ethact=eth0 ipaddr=192.168.1.1 serverip=192.168.1.2
Nie ma co zwlekać,pobieramy do pamięci RAM obraz nowego bootloadera:
hornet>tftpboot 0x80800000 uboot.bin eth1 link down Using eth0 device TFTP from server 192.168.1.2; our IP address is 192.168.1.1 Filename 'uboot.bin'. Load address: 0x80800000 Loading: ############# done Bytes transferred = 65536 (10000 hex) hornet>
Usuwamy stary bootloader:
(UWAGA! po wykonaniu poniższego kroku, NIE odłączaj zasilania; Twoje urządzenie pozbawione będzie bootloadera, co ZNACZNIE utrudni jego odratowanie, dla
niektórych może się to okazać niemożliwe w domowych warunkach))
hornet> erase 0x9F000000 +0x10000 First 0x0 last 0x0 sector size 0x10000 0 Erased 1 sectors
I zapisujemy nowy bootloader w miejsce starego:
hornet> cp.b 0x80800000 0x9F000000 0x10000 Copy to Flash... write addr: 9f000000 done
Voila, mamy nowy, zmodyfikowany, ulepszony bootloader.
Reset.
hornet>reset
Bootujemy, a konsola pokazuje nam:
***************************************** * U-Boot 1.1.4 (Aug 19 2013) * ***************************************** AP121 (AR9331) U-Boot for TL-MR3020 DRAM: 32 MB FLASH: Spansion S25FL032P (4 MB) LED on during eth initialization... Hit any key to stop autobooting: 0 Booting image at: 0x9F020000... Uncompressing kernel image... ## Error: failed to execute 'bootcmd'! HTTP server is starting for firmware update... Ethernet mode (duplex/speed): 1/100 Mbps HTTP server is starting at IP: 192.168.1.1 HTTP server is ready!
Cóż to oznacza? Nic innego, jak to że bootloader poprawnie się załadował, jednak oprogramowanie które zostało w pamięci nie działa poprawnie, w związku z czym uruchomił się serwer
www, za pomocą którego możemy zainstalować nowe oprogramowanie.
Wtedy też możemy za pomocą przeglądarki www wejść na adres routera, i wgrać nowe oprogramowanie:
Gratulacje, router znów jest w pełni funkcjonalny.
Może się jednak zdarzyć, że router będzie próbował coś tam ładować. Wtedy, zaraz po włączeniu zasilania wysyłamy dowolny klawisz, aby przerwać ładowanie i przejśc w tryb failsave, po
czym zobaczymy znajomy prompt:
uboot>
Wystarczy uruchomić serwer www poleceniem httpsd, i wgrać nowe oprogramowanie 🙂
UWAGA! Jeżeli decydujecie się na wgrywanie modyfikowanego bootloadera, w chwili pisania tego artykułu nie wspierał on oryginalnego oprogramowania TP-Linka, należy więc instalować
alternatywne oprogramowanie (OpenWRT, Gargoyle, DD-WRT, Tomato)
Lekturki:
wiki.openwrt.org
tech-blog.pl
en.wikipedia.org