Xiaomi Router AX3200 – flashowanie OpenWRT metodą UART

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

Obrazek posiada pusty atrybut alt; plik o nazwie r_IMG_20220727_220405-1024x768.jpg

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 😉

Obrazek posiada pusty atrybut alt; plik o nazwie r_IMG_20220729_192041-1024x768.jpg
Obrazek posiada pusty atrybut alt; plik o nazwie image-1024x771.png

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

Obrazek posiada pusty atrybut alt; plik o nazwie signal-2022-11-25-164706_002-1024x768.jpeg

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ą.

Obrazek posiada pusty atrybut alt; plik o nazwie image-1.png

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.

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie1-1024x639.png

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.

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie2.png

Zakładki GLOBAL i DHCP ustawiamy w następujący sposób:

Obrazek posiada pusty atrybut alt; plik o nazwie image-3.png

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).

Obrazek posiada pusty atrybut alt; plik o nazwie image-2-1024x768.png

Bacznie śledzimy putty – po ścianie tekstu powinien załączyć się tryb wczytywania oprogramowania z serwera tftp. Potrzebujemy nazwy pliku jakiego urządzenie szuka.

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie5.png

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.

Obrazek posiada pusty atrybut alt; plik o nazwie image-4.png

Tym razem po restarcie komunikaty w putty powinny brzmieć nieco inaczej:

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie7.png

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

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie8.png

wybieramy U-Boot console i widzimy następujące menu:

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie9.png

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:

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie10.png

U mnie jest to 0x4007ff28. Następnie wydajemy kolejne polecenie:

MT7622> bootm 0x4007ff28
Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie11.png

Po przemieleniu danych wciskamy [ENTER] i zobaczymy pierwszy raz OpenWRT na naszym routerze.

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie12.png

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:


Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie12achyba-1024x425.png

Jak komputer połączy się z routerem, uruchamiamy WinSCP. Klikamy w przycisk 'Nowa sesja’ i konfigurujemy połączenie w następujący sposób:

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie13.png

Klikamy 'Logowanie’ i otrzymamy następujący komunikat

Obrazek posiada pusty atrybut alt; plik o nazwie image-5.png

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ą.

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie15-1024x664.png
Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie16.png

Przełączamy się na putty i wydajemy polecenie

sysupgrade /tmp/images/sysupgrade.bin
Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie18.png

po wgraniu aktualizacji urządzenie się zrestartuje, jeśli nie to restartujemy poleceniem reboot

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie19.png

Istnieje szansa na to, że pojawi nam się następujące okno:

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie20.png

Musimy wtedy cofnąć się do bootmenu poleceniem

MT7622> bootmenu

Z dostępnych opcji:

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie8-1.png

wybieramy Load firmware 0 lub 1

i jeśli wczyta nam się OpenWRT, wpisujemy:


fw_setenv boot_fw1 "run boot_rd_img;bootm"
Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie21.png

restartujemy poleceniem reboot

Jeśli wszystko poszło dobrze, w przeglądarce powinno nas przywitać OpenWRT

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie22-1024x480.png

klikamy Login i widzimy nasze nowe oprogramowanie 🙂

Obrazek posiada pusty atrybut alt; plik o nazwie Przechwytywanie23.png

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *