Długo nie było nowego wpisu, ale nadrobię czymś konkretnym. Udało mi się przeflashować router Xiaomi AX3200 na OpenWRT w oparciu o instrukcje z forów OpenWRT.
Mój egzemplarz to wersja 11/2021, z zablokowanym telnetem oraz oprogramowaniem w wersji 1.0.83
Zacznę od tego, czego mi się zrobić nie udało – nie zadziałała metoda wykorzystująca XMiR-Patcher. Również rozbiłem się o błąd " It is necessary to reorganize the device into "whc_cap" mode!"
, co – po przeanalizowaniu kodu pythona – okazało się być odniesieniem do metody wykorzystującej tryb netmode: 4, do którego włączenia wymagane jest drugie urządzenie i przełączenie go w tryb mesh.
W przypadku swojego urządzenia wykorzystałem metodę UART. Postaram się ją w miarę możliwości dość szczegółowo opisać.
Do wgrania oprogramowania tą metodą potrzebujemy:
- lutownicę i podstawowe umiejętności lutowania
- standardowe goldpiny 2,54mm
- konwerter usb-ttl (autor użył ch340, ja swojego ulubionego cp2102)
- przewód ethernet
- spinacz biurowy lub podobne urządzenie do wciśnięcia przycisku reset
- komputer z systemem windows i portem ethernet
- putty
- tftpd64
- winscp
Zaczynamy od najtrudniejszej części, czyli rozebrania urządzenia. Niestety, nie zrobiłem zdjęć. Pod naklejką z s/n są dwie śruby które odkręcamy a następnie musimy podważyć górną obudowę. Najlepiej zacząć od portów ethernet i iść wzdłuż dłuższej krawędzi.
Po rozmontowaniu routera musimy ostrożnie odkręcić jego płytę główną i przylutować od tyłu goldpiny. Tu również nie pochwalę się zdjęciami, gdyż moje luty są bardziej funkcjonalne niż ładne 😉
Pierwszy pin zostawiamy pusty – jest to VCC, które w tej sytuacji nie jest nam do niczego potrzebne, drugi pin to RX który łączymy z TX naszego konwertera, GND klasycznie z GND natomiast TX z RX konwertera. Konwerter ofc podłączamy do portu usb komputera.
Uruchamiamy putty, tftpd64 oraz podłączamy urządzenie do zasilania i do naszego komputera przez ethernet
W putty ustawiamy port COM pod którym zainstalował się nasz konwerter usb-ttl oraz ustawiamy prędkość połączenia na 115200, resztę ustawień pozostawiamy domyślną.
Jeśli połączyliśmy się prawidłowo, w oknie putty powinien nam się pojawić ściana tekstu – to bootlog, obecnie nie jest nam potrzebny, ale sygnalizuje to, że połączenie po UART zostało nawiązane poprawnie. Bootloader na chwilę przystanie na oknie wyboru oprogramowania 'U-Boot SPI NAND’, jednak nie będziemy mieli możliwości wybrania niczego, bo klawiatura będzie zablokowana.
Odkryto jednak metodę na odblokowanie klawiatury w tej pozycji – należy dwukrotnie wgrać oprogramowanie do urządzenia w trybie recovery. Do tego będzie nam potrzebny program tftpd64.
Wchodzimy w ustawienia karty sieciowej i przestawiamy adres IP naszego komputera na 192.168.1.100.
Uruchamiamy tftpd64 jako administrator i wybieramy katalog który będzie udostępniany (w moim przypadku c:\temp) oraz interface do nasłuchu. Następnie klikamy w Settings.
Zakładki GLOBAL i DHCP ustawiamy w następujący sposób:
Wyskoczy nam komunikat o braku skonfigurowanej bramy domyślnej – ignorujemy go, brama nie jest nam do tego potrzebna 🙂 Restartujemy program, by uruchomił się z nowymi ustawieniami. Jeśli pojawią się żądania dostępu do sieci/firewalla, wyrażamy zgodę – w końcu program ma stworzyć z naszego komputera serwer tftp.
Pozostawiając uruchomione putty i tftpd64, odłączamy zasilanie routera, następnie wciskamy przycisk reset i trzymamy tak długo aż dioda – która w tym trybie przybrała kolor bursztynowy – nie zacznie migać (około 15-20s).
Bacznie śledzimy putty – po ścianie tekstu powinien załączyć się tryb wczytywania oprogramowania z serwera tftp. Potrzebujemy nazwy pliku jakiego urządzenie szuka.
U mnie ten plik miał nazwę C0A81F00.img, ale opisy w internecie mówią, że może się nazywać bardzo róznie.
Ściągamy firmware z internetu. 1.0.71 zalecany we wpisie o który się opieram znalazłem tutaj. mirror na wszelki wypadek. Pobranemu plikowi zmieniamy nazwę na tą, którą udało nam się określić, następnie restartujemy router z wciśniętym resetem jak poprzednio.
Tym razem po restarcie komunikaty w putty powinny brzmieć nieco inaczej:
Po wgraniu oprogramowania robimy restart i cały proces wgrywania powtarzamy. Jeśli nam się uda zrobić poprawnie dwukrotne wgranie oprogramowania, powinniśmy mieć kontrolę w menu wyboru trybu
wybieramy U-Boot console i widzimy następujące menu:
Nareszcie pobieramy OpenWRT! Tym razem interesuje nas obraz initramfs recovery, w dniu pisania tego tekstu, obraz w wersji 22.03 znajduje się pod tym linkiem. Zapisujemy go w lokacji udostępnianej przez tftpd64 i nadajemy mu nazwę taką samą jak poprzedniego pliku (w moim przypadku C0A81F00.img, stary ofc usuwamy)
Z poziomu putty wydajemy polecenie:
MT7622> tftpboot
Ponownie otrzymamy ścianę tekstu, po przeprocesowaniu interesuje nas pozycja Load adress:
U mnie jest to 0x4007ff28. Następnie wydajemy kolejne polecenie:
MT7622> bootm 0x4007ff28
Po przemieleniu danych wciskamy [ENTER] i zobaczymy pierwszy raz OpenWRT na naszym routerze.
Musimy teraz wgrać oprogramowanie sysupgrade. Wydajemy następujące polecenie w celu utworzenia katalogu do którego skopiujemy nasz plik z oprogramowaniem:
mkdir /tmp/images
Pobieramy ze strony openwrt oprogramowanie (w chwili pisania tego tekstu 22.03). Dla wygody zmieniamy mu nazwę na sysupgrade.bin. Swój plik zapisałem do c:\temp.
Przestawiamy nasz komputer na DHCP, aby otrzymał adres ip z routera:
Jak komputer połączy się z routerem, uruchamiamy WinSCP. Klikamy w przycisk 'Nowa sesja’ i konfigurujemy połączenie w następujący sposób:
Klikamy 'Logowanie’ i otrzymamy następujący komunikat
Klikamy Tak
Po nawiązaniu połączenia ukaże się nam zawartość routera.
W lewym oknie wchodzimy do katalogu do którego zapisaliśmy sysupgrade.bin, w prawym wchodzimy w nasz /tmp/images. Przeciągamy plik z lewej strony na prawą.
Przełączamy się na putty i wydajemy polecenie
sysupgrade /tmp/images/sysupgrade.bin
po wgraniu aktualizacji urządzenie się zrestartuje, jeśli nie to restartujemy poleceniem reboot
Istnieje szansa na to, że pojawi nam się następujące okno:
Musimy wtedy cofnąć się do bootmenu poleceniem
MT7622> bootmenu
Z dostępnych opcji:
wybieramy Load firmware 0 lub 1
i jeśli wczyta nam się OpenWRT, wpisujemy:
fw_setenv boot_fw1 "run boot_rd_img;bootm"
restartujemy poleceniem reboot
Jeśli wszystko poszło dobrze, w przeglądarce powinno nas przywitać OpenWRT
klikamy Login i widzimy nasze nowe oprogramowanie 🙂