strona główna
artykuły i recenzje
poradniki
galeria zdjęć
fotoblog

Zmodyfikowany U-Boot dla routerów TP-Link z Atheros AR9331 z trybem aktualizacji oprogramowania przez www i konsolą sieciową NetConsole

Dodano: Piątek, 29 marca 2013, godzina 20:45:49
Kategoria: Artykuły i recenzje

Wstęp

UWAGA!

Ten projekt w sierpniu 2013 roku został przeniesiony na GitHub: github.com/pepe2k/u-boot_mod.
Poniższy artykuł dotyczy ostatniej wersji opublikowanej na mojej stronie, tj. Jun 19 2013.

Ostatnia aktualizacja: 24-08-2013

Routery marki TP-Link z układem SoC Atheros AR9331 cieszą się bardzo dużą popularnością, głównie ze względu na miniaturowych rozmiarów model TL-WR703N, o którym pisałem do tej pory wiele razy. Bardzo duża liczba opublikowanych w sieci projektów bazujących na TL-MR3020, TL-WR703N, TL-MR3040 oraz TL-MR11U (i innych, “pełnowymiarowych” routerów, takich jak TL-WR740N, TL-WR741ND itd.) oraz fakt zupełnego rozpracowania niektórych modeli z tej rodziny przez społeczność OpenWrt (w przypadku TL-WR703N odtworzono nawet schemat elektryczny na podstawie skanów poszczególnych warstw PCB!) powodują, że te produkty wciąż są chętnie kupowane przez osoby lubiące modyfikacje i alternatywne oprogramowanie, a producenci rozszerzają swoją ofertę o urządzenia z AR9331. Przykładowo, zupełnie niedawno, litewska firma 8 devices zaprezentowała drugą wersję swojego flagowego modułu - Carambola 2, właśnie z Atheros AR9331. Co więcej, moduł ten jest lepiej wyposażony niż routery TP-Link - posiada 64 MiB pamięci RAM DDR2 i pamięć trwałą flash o pojemności 16 MiB (jest to górne ograniczenie zastosowanego układu Atheros).

Jedyną wadą routerów TP-Link z AR9331, jeśli można tak w ogóle mówić przy tak niskiej cenie za urządzenie (TL-WR703N można kupić już za około 18 USD), jest kostka flash o pojemności 4 MiB oraz kostka pamięci DDR o pojemności 32 MiB. O ile są to w zupełności wystarczające podzespoły do instalacji i korzystania z alternatywnego oprogramowania typu OpenWrt w wersji podstawowej, to w przypadku chęci rozszerzenia funkcjonalności szybko okazuje się, że w rozmiarze 4 MiB niewiele więcej można zmieścić, a niektóre pakiety szybko pożerają pamięć RAM.

I tutaj (już prawie) dochodzimy do sedna sprawy - co bardziej obeznani z tematem szybko odkryli, że przecież i kość RAM, i kość flash można podmienić na odpowiednio większą (pomocny w tym okazał się wyciek części dokumentacji układu AR9331, zawierający między innymi rozpiskę wyprowadzeń i rejestrów) - jest to zresztą coraz bardziej popularny typ modyfikacji w społeczności OpenWrt, a na aukcjach internetowych niektórzy nawet zrobili sobie z tego stałe źródło przychodów. O ile w przypadku wymiany pamięci nie jest to zbyt skomplikowany proces, a trudność polega jedynie na dobraniu odpowiedniej kostki (na forum openrouter.info pisałem o mojej modyfikacji dotyczącej wymiany kości pamięci w tych routerach, powyższe zdjęcie to TL-MR3020 z 64 MiB RAM), to już w przypadku flash sprawa trochę się komplikuje. Powodem jest U-Boot (Universal Boot Loader) czyli, nie zagłębiając się zbytnio w szczegóły, coś w rodzaju stosowanego w “dużych komputerach” oprogramowania BIOS. Jego głównymi zadaniami jest inicjalizacja sprzętu, pamięci RAM, a następnie załadowanie jądra Linux, które przejmie kontrolę nad urządzeniem. Poza tym, U-Boot posiada też dodatkową funkcjonalność, jak na przykład test pamięci RAM, ładowanie oprogramowania z serwera TFTP lub z podłączonego przez USB nośnika i wiele innych (nie wszystkie opcje są oczywiście dostępne i zależy to od konkretnego wydania i platformy). Tyle teorii, bo w praktyce jest to sporych rozmiarów projekt z kodem w C i w Asemblerze, w dodatku zróżnicowanym w zależności od architektury platformy, a wersja wykorzystywana przez TP-Link pochodzi z czasów, kiedy nie dosięgałem jeszcze do klamek…

Wróćmy do problemów z wymianą kości flash - niektórzy postanowili podmienić kostkę posiłkując się poradnikami znalezionymi w sieci, w których, w znacznej większości, proponowany sposób postępowania jest taki sam. W skrócie - podłączamy nową kostkę równolegle do kostki znajdującej się aktualnie w routerze i sterujemy sygnałem “select” (kostki posiadają interfejs SPI). Po uruchomieniu konsoli U-Boot, kopiujemy pierwsze 64 KiB ze starej kostki flash (właśnie tam znajduje się kod U-Boot) gdzieś do pamięci RAM, przełączamy się na nową kostkę, czyścimy pierwsze 64 KiB i kopiujemy dane z powrotem, z RAM. W większości przypadków taki zabieg kończył się powodzeniem, ale znam również przypadki, w których ten sposób nie zadziałał, często niestety z winy użytkownika (”chyba zapomniałem przełączyć się na drugą kostkę i skasowałem sobie U-Boot, co teraz?”). W pozostałych przypadkach problem najprawdopodobniej wynikał z tego (jest to jedynie moje podejrzenie, poparte własnym doświadczeniem), że w niektórych wersjach routerów, producent wgrał bootloader w wersji, w której zastosowano instrukcję kasowania sektora (który w zastosowanych kostkach miał akurat rozmiar 64 KiB), zamiast kasowania bloku o stałym rozmiarze 64 KiB. W przypadku zastosowania kości z innym rozmiarem sektora niż ta z konkretnego egzemplarza, operacja kończyła się niepowodzeniem.

Rozwiązaniem problemu był albo zakup kostki z sektorem o takim samym rozmiarze (chociaż w tym wypadku i tak U-Boot nie byłby w stanie wykonywać operacji na całej, większej kostce, ponieważ rozmiar jest zaszyty w kodzie), albo skompilowanie U-Boot z odpowiednimi zmianami. Jak pewnie się domyślacie, na drugie rozwiązanie zdecydowało się niewielu, choć TP-Link publikuje w swoim Centrum GPL kody źródłowe do wszystkich lub prawie wszystkich routerów wykorzystujących kod na licencji GPL. Oczywiście, brakuje tam niektórych elementów, jak np. plików Makefile i generalnie jakość kodu pozostawia wiele do życzenia, ale… to i tak jeden z niewielu producentów, którzy respektują zapisy licencji GPL (w zestawie z routerami zawsze znajdziecie wydrukowaną informację o licencji GPL).

Od chwili pojawienia się na rynku modelu TL-WR703N i jego pochodnych, czyli przez ponad rok, w sieci pojawił się do tej pory tylko jeden projekt dotyczący modyfikacji U-Boot ze źródeł TP-Link dla tego routera. Jest to projekt o “wszystko-mówiącej” nazwie: wr703n-uboot-with-web-failsafe. Jego autor dokonał bardzo dużego rozeznania w opublikowanym przez TP-Link kodzie, a co więcej, udało mu się w pewnym zakresie przenieść z projektu uboot-lantiqu tryb wgrywania oprogramowania w U-Boot przez przeglądarkę (ten fragment bazuje akurat na mikro-stosie uIP w prehistorycznej wersji 0.9, która do tego zadania nadaje się idealnie).

Początkowo, na potrzeby podmiany kości flash w swoich routerach, sam wykorzystywałem kod z projektu wr703n-uboot-with-web-failsafe. Jednak od jakiegoś czasu autor niestety już go nie rozwija lub robi to sporadycznie i raczej na zasadzie metody prób i błędów (ostatnie zmiany dotyczyły możliwości zmiany zegara procesora i magistral w układzie AR9331), co czasem prowadzi do nieoczekiwanych rezultatów. Nie można mieć mu tego oczywiście za złe, bo i tak wykonał kawał świetnej roboty.

W związku z brakiem rozwoju powyższego projektu, bazując właśnie na nim postanowiłem przygotować własną modyfikację U-Boot dla routerów TL-WR703N, TL-MR3020, TL-MR3040 oraz TL-WR740N v4 (lista jest otwarta, po prostu na razie tylko te modele miałem osobiście i mogłem je gruntownie przetestować - jak ktoś jest mi w stanie dostarczyć inne modele routerów, niekoniecznie marki TP-Link, na układzie AR9331, to mogę przygotować odpowiednią wersję poniższej modyfikacji U-Boot).

Możliwości, modyfikacje, funkcje

Początkowo chciałem w powyższym projekcie jedynie przebudować tryb wgrywania oprogramowania przez www, w taki sposób żeby działał z każdą przeglądarką (w chwili pisania tego tekstu, tryb wgrywania oprogramowania w projekcie wr703n-uboot-with-web-failsafe działał prawidłowo wyłącznie w Firefox). Jak to często bywa, zaczęło się niewinnie, a po kilku zarwanych nocach nad dokumentami RFC dotyczącymi protokołu HTTP skończyło się na modyfikacjach i przebudowie o znacznie większym zasięgu. Pomijając kwestie techniczne dotyczące kodu (usunąłem znaczną część plików źródłowych, sporo nieużywanych elementów, naprawiłem skrypt linkera, przebudowałem pliki Makefile), dokonałem też kilku zmian w samym funkcjonowaniu U-Boot.

W telegraficznym skrócie w prezentowanej wersji U-Boot dokonałem poniższych zmian:

  • usunąłem nieistotne informacje wyświetlane w konsoli podczas uruchamiania
  • przyspieszyłem start (między innymi dzięki zwiększeniu zegara SPI i usunięciu inicjalizacji niepotrzebnych w U-Boot elementów)
  • usunąłem wymóg wpisywania “tpl” w celu uruchomienia konsoli U-Boot - teraz do zatrzymania ładowania wystarczy wysłać dowolny znak
  • przebudowałem tryb wgrywania oprogramowania przez www (konkretniej - aplikację - serwer www, dla stosu uIP)
  • tryb www uruchomi się automatycznie w przypadku problemów z załadowaniem systemu lub jego brakiem
  • możliwe jest wgranie trzech różnych typów obrazów, w zależności od potrzeb: systemu (firmware), U-Boot oraz partycji ART (Atheros Radio Test)
  • tryb www działa na wszystkich przeglądarkach (przetestowałem najnowsze wersje: Firefox, Opera, Chrome, Safari, Internet Explorer)
  • uruchomienie trybu www potwierdzone jest 2-sekundową sekwencją szybkiego mrugania diod(y) LED
  • wprowadziłem możliwość przerwania ładowania systemu i uruchomienia trybu www lub konsoli i konsoli sieciowej przy pomocy przycisku “reset” dostępnego w routerach - wystarczy przed podłączeniem zasilania wcisnąć przycisk i trzymać po włączeniu przez około (czas można zliczyć - dioda(y) LED zapalają się co sekundę kiedy przycisk jest wciśnięty):
    • 3 sekundy żeby uruchomić tryb www
    • 5 sekund żeby uruchomić konsolę U-Boot
    • 7 sekund żeby uruchomić konsolę sieciową U-Boot
  • dodałem automatyczne rozpoznawanie zastosowanej kości flash na podstawie JEDEC ID (lista obecnie rozpoznawanych kości w dalszej części)
  • MAC adres dla interfejsów sieciowych jest pobierany z flash, a nie ustawiany na sztywno
  • dodałem nowe opcje w konsoli U-Boot: odczyt z pamięci flash adresu MAC, modelu routera oraz pinu, zmiana adresu MAC, opcja “run” - uruchamianie komendy zapisanej w zmiennych środowiskowych “env” U-Boot
  • możliwość zmiany taktowania CPU, RAM i magistrali AHB (kilka predefiniowanych ustawień) - opcja dostępna dla osób samodzielnie kompilujących źródła
  • i inne…

Aktualnie tryb wgrywania oprogramowania oparty jest na 7 statycznych stronach www:

  • index.html (główna strona, umożliwia załadowanie do routera firmware, np. obrazu OpenWrt)
  • uboot.html (umożliwia załadowanie do routera nowego obrazu U-Boot)
  • art.html (umożliwia załadowanie do routera nowego obrazu partycji ART)
  • 404.html (strona błędu 404)
  • flashing.html (strona informacyjna o prawidłowym przesłaniu pliku i rozpoczęciu aktualizacji - w przypadku wgrywania U-Boot lub ART)
  • flashingfw.html (strona informacyjna z paskiem postępu przy aktualizacji firmware)
  • fail.html (strona błędu wgrywania pliku - np. w przypadku próby wgrania obrazu o niewłaściwym rozmiarze)

Poniżej zrzuty ekranu z załadowanymi poszczególnymi stronami w przeglądarce Chrome (model routera nie ma znaczenia dla trybu www).

Tryb wgrywania obrazów przez www nie posiada praktycznie żadnej funkcjonalności weryfikującej poprawność przesyłanych danych. W gruncie rzeczy, możecie przesłać jako firmware zdjęcie z wakacji i router bez zająknięcia przyjmie je, skopiuje do pamięci RAM, a po wyczyszczeniu odpowiedniego fragmentu, przekopiuje do flash. O ile wgranie zdjęcia z wakacji w miejsce firmware skończy się jedynie błędem ładowania systemu i ponownym uruchomieniem trybu wgrywania przez www, to już w przypadku wgrywania obrazu U-Boot chwila nieuwagi może mieć katastrofalne skutki! Zwracam również uwagę na to, że pasek postępu na stronie potwierdzającej aktualizację firmware to zabieg czysto kosmetyczny - odlicza on dokładnie 30 sekund, ale w niektórych przypadkach aktualizacja może trwać krócej lub dłużej (mniejszy lub większy obraz firmware).

Oczywiście nie jest tak, że router przyjmie wszystko co mu się wyśle - sprawdzany jest przede wszystkim rozmiar przesyłanego pliku i jego pochodzenie (muszą to być dane POST z elementu input o odpowiedniej nazwie - na jej podstawie rozpoznawany jest zresztą typ aktualizacji którą przeprowadzacie). Minimalnie można przesłać 10 KiB (ograniczenie wynika z faktu obsługi żądań POST wyłącznie o długości przekraczającej jeden pakiet sieciowy), a w przypadku obrazów U-Boot i ART przesyłany plik musi mieć dokładnie 64 KiB (65536 bajtów). Górnego ograniczenia praktycznie nie ma (tak naprawdę jest, ale nie powoduje zerwania połączenia). Router przyjmie i 200 MiB danych, ale po prostu ich nigdzie nie zapisze, a po zakończeniu transferu zwróci stronę z informacją o błędzie. Poza tym, w przypadku nieznanej kości flash, nie ma możliwości wgrania obrazu ART - w takim wypadku nie wiadomo pod jaki adres wgrać obraz z powodu braku informacji o rzeczywistym rozmiarze kostki.

Poniżej zamieszczam przykładowy log z konsoli U-Boot zawierający sekwencję startową, informację wyświetlaną w trakcie przytrzymywania przycisku po podłączeniu zasilania i dostępne funkcje w linii komend U-Boot.

*****************************************
*      U-Boot 1.1.4  (Apr 22 2013)      *
*****************************************
 
AP121 (AR9331) U-Boot for TL-WR740N(D)v4
 
DRAM:  32 MB
FLASH: EON EN25Q64 (8 MB)
 
LED on during eth initialization...
 
Press reset button for at least:
- 3 sec. to run web failsafe mode
- 5 sec. to run U-Boot console
- 7 sec. to run U-Boot netconsole
 
Reset button is pressed for:  6 
 
Button was pressed for 6 sec...
Starting U-Boot console...
 
uboot> ?
 
?           - alias for 'help'
boot        - boot default - run command 'bootcmd'
bootd       - boot default, i.e., run 'bootcmd'
bootm       - boot application image from memory
cp          - memory copy
erase       - erase FLASH memory
help        - print embedded help
httpd       - start www server for firmware recovery
md          - memory display
mm          - memory modify (auto-incrementing)
mtest       - simple RAM test
mw          - memory write (fill)
nm          - memory modify (constant address)
printenv    - print environment variables
printmac    - print MAC address stored in flash
printmodel  - print router model stored in flash
reset       - perform RESET of the CPU
run         - run commands in an environment variable
setenv      - set environment variables
setmac      - save new MAC address in flash
tftpboot    - boot image via network using TFTP protocol
version     - print U-Boot version
 
uboot>

Z kolei poniższy log zawiera całą sekwencję ładowania obrazu OpenWrt przez przeglądarkę. Jest to kolejno: zatrzymanie automatycznego bootowania systemu, uruchomienie serwera www (komenda httpd), wywołanie strony głównej w przeglądarce i przesłanie wybranego pliku. Przesyłane w kolejnych pakietach dane układane są w pamięci RAM, po ostatniej ramce zwracana jest strona potwierdzenia otrzymania danych i rozpoczyna się proces zapisu w pamięci flash - najpierw odpowiedni zakres jest kasowany, a potem następuje zapis z pamięci RAM do flash.

*****************************************
*      U-Boot 1.1.4  (Apr 22 2013)      *
*****************************************
 
AP121 (AR9331) U-Boot for TL-WR740N(D)v4
 
DRAM:  32 MB
FLASH: EON EN25Q64 (8 MB)
 
LED on during eth initialization...
 
Hit any key to stop autobooting:  0 
 
uboot> httpd
 
Ethernet mode (duplex/speed): 1/100 Mbps
HTTP server is starting at IP: 192.168.1.1
HTTP server is ready!
 
Request for: /
Request for: /style.css
Data will be downloaded at 0x80080000 in RAM
Upgrade type: firmware
Upload file size: 3932160 bytes
Loading: #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #######################################
         #
 
HTTP upload is done! Upgrading...
 
****************************
*    FIRMWARE UPGRADING    *
* DO NOT POWER OFF DEVICE! *
****************************
 
Executing: erase 0x9F020000 +0x3C0000; cp.b 0x80080000 0x9F020000 0x3C0000
 
Erase flash from 0x9F020000 to 0x9F3DFFFF in bank #1
Erasing: #######################################
         #####################
 
Erased sectors: 60
 
Copying to flash...
Writting at address: 0x9F020000
 
Done!
 
HTTP ugrade is done! Rebooting...

Bardzo ciekawą opcją, którą dodałem w wersji skompilowanej w dniu 22-04-2013 (wersja Apr 22 2013), jest konsola sieciowa - tzw. U-Boot NetConsole. Jest to nic innego jak po prostu dostęp do konsoli U-Boot przez sieć, dokładniej - w ramach protokołu UDP. Na tę funkcjonalność zwrócił mi uwagę jeden z użytkowników forum internetowego eko.one.pl, a po wielu testach i kilku poprawkach w oryginalnym kodzie źródłowym, postanowiłem ją dodać jako kolejną opcję uruchamianą przy pomocy przycisku - wystarczy przytrzymać “reset” przez minimum 7 sekund, a następnie utworzyć połączenie przez protokół UDP z adresem 192.168.1.1, na porcie 6666.

Należy pamiętać tylko o tym, żeby w trakcie komunikacji dodawać na końcu każdej komendy znak nowej linii (LF). Uprzedzam także pytania dotyczące szybkości działania NetConsole - w źródłach, na bazie których powstała ta wersja U-Boot, przed każdym wysłaniem pakietu UDP resetowany jest interfejs sieciowy, co w połączeniu z brakiem optymalizacji (w przypadku echo każdy znak jest wysyłany w osobnym pakiecie) skutkuje trochę powolną pracą. Niemniej, jest to bardzo przydatna funkcjonalność, ponieważ praktycznie pozwala całkowicie zrezygnować z podłączania się do konsoli szeregowej - cała komunikacja z U-Boot może odbywać się przez sieć. Nic nie stoi na przeszkodzie nawet w używaniu TFTP wraz z NetConsole - z tego też powodu pozostawiłem adresy IP w konfiguracji NetConsole takie same jak dla trybu TFTP i serwera www (adres IP routera: 192.168.1.1, adres IP komputera: 192.168.1.2, maska sieci 255.255.255.0).

W przypadku systemów Windows, do komunikacji przy pomocy konsoli sieciowej można wykorzystać na przykład program Hercules SETUP utility (zakładka UDP) lub każdy inny, umożliwiający wysyłanie i odbieranie datagramów UDP. Jeżeli połączenie na komputerze zostanie otwarte odpowiednio wcześniej, to w pierwszym pakiecie wysłanym z routera będzie wersja U-Boot oraz tzw. znak zachęty (”uboot >”).

Tryb konsoli sieciowej można również uruchomić z poziomu zwykłej konsoli, wydając komendę “run nc”. Spowoduje to wykonanie komend zapisanych kolejno w zmiennej nc:

  • setenv stdin nc
  • setenv stdout nc
  • setenv stderr nc
  • version

Chcę to wgrać do swojego routera, tylko jak?

Zanim przejdziemy do wgrywania mojej wersji U-Boot do Twojego routera muszę zamieścić stosowne ostrzeżenie:

UWAGA!

Autor tego tekstu oraz prezentowanej wersji U-Boot nie ponosi żadnej odpowiedzialności za niepożądane skutki wynikające z zastosowania się do zamieszczonych na tej stronie instrukcji, nieumiejętnego wgrania oprogramowania lub błędów w prezentowanym oprogramowaniu. Autor dołożył wszelkich starań i przetestował prezentowane oprogramowanie na wymienionych w dalszej części urządzeniach, ale nie gwarantuje, że będzie ono prawidłowo działać na Twoim urządzeniu.

Co więcej, zostałeś ostrzeżony, że wymiana oprogramowania U-Boot jest operacją wysoce niebezpieczną i w przypadku niepowodzenia, Twoje urządzenie już się nie uruchomi, a jedyną możliwością przywrócenia go do funkcjonowania będzie zaprogramowanie układu flash przy pomocy zewnętrznego programatora.

Wszystkie operacje wykonane na podstawie zamieszczonych tutaj informacji wykonujesz wyłącznie na własną odpowiedzialność!

Formalności mamy za sobą, przejdźmy do konkretów - masz trzy sposoby na wgranie mojej wersji U-Boot:

  1. Przy pomocy zewnętrznego programatora.
  2. Z poziomu zainstalowanego systemu OpenWrt.
  3. Z poziomu konsoli U-Boot.

Jeżeli zamierzasz zastosować pierwszą opcję, to znaczy że wiesz “co w trawie piszczy” i prawdopodobnie podmieniasz też kostkę na większą. W takim wypadku wystarczy, że wybierzesz/skompilujesz odpowiednią wersję U-Boot dla wybranego modelu routera i ewentualnie dodasz obsługę swojej kostki flash w pliku ar7240_flash.c, w bloku switch, wewnątrz funkcji flash_init(). Plik wynikowy powinien znaleźć się na samym początku flash (pod adresem/offsetem 0×0).

Dodatkowo, przy wymianie kości flash powinieneś skopiować również ze starego do nowego układu ostatnie 64 KiB (chociaż akurat ten fragment można wgrać później przez www) oraz 64 KiB znajdujące zaraz za U-Boot. Wbrew niektórym informacjom zamieszczonym w sieci, dla tych routerów U-Boot nie zajmuje pierwszych 128 KiB danych w pamięci flash! Kod U-Boot zajmuje do 64 KiB (wolne komórki flash powinny być zapisane wartością 0xFF), zmienne środowiskowe (tzw. env) ma zaszyte w kodzie (tzw. hard coded), a w kolejnych 64 KiB w pamięci flash znajdują się jedynie 2/3 wartości (adres MAC, model routera oraz ewentualnie pin do WPS). Cała reszta tego obszaru jest pusta! Poniższy schemat powinien wyjaśnić strukturę danych w pamięci flash i warto się z nim dokładnie zapoznać.

Oczywiście, teoretycznie kod U-Boot może zajmować więcej miejsca. Może to być nawet i 128 KiB, ale w takim wypadku OpenWrt nie będzie w stanie rozpoznać modelu routera, a co gorsze - utracony zostanie adres MAC znajdujący się pod adresem 0×1FC00 (offset od początku flash), dlatego też przy ewentualnych zmianach kodu powinieneś zwrócić uwagę na to, czy wynikowy obraz nie jest zbyt duży.

Opcja zmiany U-Boot z poziomu OpenWrt nie została przeze mnie jeszcze sprawdzona, dlatego nie będę o niej pisać i zajmiemy się ostatnią metodą. Będziesz potrzebować:

  • Jeden z routerów: TL-WR703N, TL-MR3020, TL-MR3040, TL-WR740N v4 (lub bliźniacze) z działającym U-Boot
  • Adapter USB-UART pracujący z logiką 3,3 V, podłączony do odpowiednich wyprowadzeń na PCB routera (informacji szukajcie na stronie OpenWrt Wiki)
  • Program do obsługi komunikacji przez port szeregowy (Putty, Terminal lub inny)
  • Serwer TFTP

Obrazy mojej wersji U-Boot przetestowałem na poniższych wersjach routerów:

  • TP-Link TL-WR703N ver. 1.5, 1.6, 1.7 (naklejka na obudowie), rev. 1.1 (PCB)
  • TP-Link TL-MR3020 ver. 1.6 (naklejka na gnieździe RJ45), rev. 1.1 (PCB)
  • TP-Link TL-MR3040 ver. 1.0 (naklejka na wewnętrznej stronie obudowy), rev. 1.1 (PCB)
  • TP-Link TL-WR740N ver. 4.23 (naklejka na obudowie), rev. 1.0 (PCB)
  • TP-Link TL-MR3220 ver. 2.1 (naklejka na obudowie), rev. 1.0 (PCB)
  • TP-Link TL-MR10U ver. 1.0 (naklejka na gnieździe RJ45)

Jeżeli posiadasz jeden z powyższych modeli, ale w innej wersji, to odradzam wymiany U-Boot ze względu na możliwe różnice sprzętowe - szczególnie w przypadku TL-WR740N w wersjach niższych niż v4 (możesz też skontaktować się ze mną w tej sprawie)! Niemniej, w przypadku większości modeli, wersja nie powinna mieć dużego znaczenia i oznacza najczęściej wersję oryginalnego oprogramowania, ale należy to zweryfikować - najlepiej otwierając obudowę i sprawdzając jaki układ znajduje się w Waszym routerze. Przykładowo, wersja dla modelu TL-WR740N v4 powinna bez problemów działać także w bliźniaku - modelu z serii TL-WR741ND v4.

Na wymienionych powyżej routerach sprawdziłem i potwierdzam działanie wymienionych poniżej kości flash:

  • Spansion S25FL032P (4 MiB, 64 x 64 KiB, fabrycznie montowana w TL-MR3020/TL-MR3040 i często w TL-WR703N)
  • Eon EN25Q32B (4 MiB, 1024 x 4 KiB, czasem spotykana w TL-WR703N)
  • Eon EN25Q64 (8 MiB, 2048 x 4 KiB)
  • Winbond W25Q64BV (8 MiB, 2048 x 4 KiB)
  • Winbond W25Q128FV (16 MiB, 4096 x 4 KiB)

Pełną listę obsługiwanych kości flash, to znaczy takich które prezentowana wersja U-Boot rozpoznaje automatycznie, zamieszczam poniżej.

4 MiB:

  • Spansion S25FL032P (4 MiB, JEDEC ID: 01 0215)
  • Atmel AT25DF321 (4 MB, JEDEC ID: 1F 4700)
  • EON EN25Q32 (4 MB, JEDEC ID: 1C 3016)
  • Micron M25P32 (4 MB, JEDEC ID: 20 2016)
  • Windbond W25Q32 (4 MB, JEDEC ID: EF 4016)
  • Macronix MX25L320 (4 MB, JEDEC ID: C2 2016)

8 MiB:

  • Spansion S25FL064P (8 MB, JEDEC ID: 01 0216)
  • Atmel AT25DF641 (8 MB, JEDEC ID: 1F 4800)
  • EON EN25Q64 (8 MB, JEDEC ID: 1C 3017)
  • Micron M25P64 (8 MB, JEDEC ID: 20 2017)
  • Windbond W25Q64 (8 MB, JEDEC ID: EF 4017)
  • Macronix MX25L640 (8 MB, JEDEC ID: C2 2017, C2 2617)
  • SST 25VF064C (8 MB, JEDEC ID: BF 254B)

16 MiB:

  • Winbond W25Q128 (16 MB, JEDEC ID: EF 4018)
  • Macronix MX25L128 (16 MB, JEDEC ID: C2 2018, C2 2618)

Jeżeli na powyższej liście nie ma kostki, którą chciałbyś zastosować, lub z jakiegoś innego powodu masz co do niej wątpliwości - skontaktuj się ze mną, spróbuję pomóc. Wgranie mojej modyfikacji do nieznanej kości nie powinno mieć żadnych negatywnych skutków, ale powinieneś sprawdzić czy zastosowana kostka obsługuje instrukcję kasowania bloku o rozmiarze 64 KiB (instrukcja 0xD8). Poza tym, rozmiar kości zostanie ustawiony na sztywno - na 4 MiB, a w trakcie bootowania wyświetlony zostanie taki komunikat:

*****************************************
*      U-Boot 1.1.4  (Apr 22 2013)      *
*****************************************
 
AP121 (AR9331) U-Boot for TL-WR703N
 
DRAM:  32 MB
FLASH: Unknown type (using only 4 MB)
 
Please, send request to add support
for your flash - JEDEC ID: 0xXYXYXY

Instrukcja krok po kroku

Jak już wybierzesz odpowiednią wersję U-Boot, możesz przystąpić do aktualizacji. Do napisania poniższej instrukcji wykorzystałem router TL-MR3020 z oryginalną kostką flash.

Krok 1: przygotowania

  • Ustaw na komputerze stały adres IP 192.168.1.2 (maska 255.255.255.0) i podłącz się do routera kablem RJ45 (w przypadku TL-WR740N v4 nie ma znaczenia czy się podłączysz do portu WAN czy któregoś portu przełącznika)
  • Uruchom serwer TFTP i wskaż mu do udostępniania folder zawierający plik z wybraną wersją U-Boot
  • Zmień nazwę pliku z U-Boot na jakąś krótszą, np. uboot.bin
  • Uruchom program do komunikacji przez port szeregowy
  • Podłącz zasilanie do routera i zatrzymaj automatyczne ładowanie systemu (wpisz “tpl” przed pojawieniem się “Autobooting in 1 seconds“)

Krok 2: zmiana adresów IP w routerze

TP-Link ustawił w U-Boot niewygodne adresy IP dlatego zanim rozpoczniesz pobieranie obrazu U-Boot zmienimy te adresy na takie, które wykorzystuję w swojej wersji.

  • Wpisz w konsoli U-Boot kolejno (bez znaków cudzysłowia!): “setenv ipaddr 192.168.1.1” i “setenv serverip 192.168.1.2
  • Sprawdź wprowadzone zmiany wpisując “printenv“, powinieneś otrzymać mniej więcej taki wynik (istotne są wartości ipaddr i serverip, powinny być takie same jak poniżej):
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=0xba:0xbe:0xfa:0xce:0x07:0x41
stdin=serial
stdout=serial
stderr=serial
ethact=eth0
ipaddr=192.168.1.1
serverip=192.168.1.2
 
Environment size: 358/65532 bytes

Krok 3: pobranie obrazu U-Boot do routera

W celu pobrania przez protokół TFTP z Twojego komputera do routera obrazu z nową wersją U-Boot wpisz komendę: “tftpboot 0×80800000 uboot.bin“, jeżeli operacja zakończy się prawidłowo powinieneś uzyskać taki komunikat:

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>

UWAGA!
Od teraz każda kolejna operacja jest praktycznie nieodwracalna! Jeżeli popełnisz jakiś błąd, to Twój router może się już więcej nie uruchomić!

Po pobraniu pliku uboot.bin przez TFTP, znajdzie się on w pamięci RAM routera pod adresem 0×80800000 (początkowy adres pamięci RAM w tych routerach to 0×80000000), możesz to sprawdzić przy pomocy komendy “md 0×80800000“. Kolejny krok to skasowanie pierwszych 64 KiB danych na kostce flash, w tym celu wpisz: “erase 0×9F000000 +0×10000“, w rezultacie otrzymasz (w przypadku kostki z sektorem o rozmiarze 64 KiB) poniższy wynik:

hornet> erase 0x9F000000 +0x10000
 
First 0x0 last 0x0 sector size 0x10000
   0
Erased 1 sectors

Od tego momentu Twój router jest pozbawiony U-Boot! Jeżeli z jakiegoś powodu zrestartujesz go w tym momencie, to już się nie uruchomi…

Adres 0×9F000000 to początek pamięci flash w tych modelach, a wydana komenda spowodowała skasowanie (wypełnienie wartością 0xFF) pierwszych 64 KiB danych. Możesz to sprawdzić przy pomocy komendy “md 0×9F000000“. Komendy w U-Boot operujące na pamięci, jak na przykład md (”memory display”), same rozpoznają (na podstawie zakresów adresacji), który typ pamięci chcesz odczytać/zmienić (RAM, flash) i od strony użytkownika nie ma to znaczenia.

Krok 3 i ostatni: zapis nowej wersji U-Boot w pamięci flash i restart

Ostatni krok to skopiowanie danych z pamięci RAM do flash, w tym celu wydaj komendę: “cp.b 0×80800000 0×9F000000 0×10000“:

hornet> cp.b 0x80800000 0x9F000000 0x10000
 
Copy to Flash... write addr: 9f000000
done

Dla pewności możesz sprawdzić czy dane trafiły we właściwe miejsce, wydając ponownie komendę “md 0×9F000000” i porównując zawartość pamięci z plikiem uboot.bin otwartym w dowolnym edytorze HEX. Jeżeli jesteś pewien, że skopiowałeś odpowiedni plik, to możesz wydać komendę “reset“, po której router uruchomi się ponownie i powinien załadować nową wersję U-Boot:

reset
 
*****************************************
*      U-Boot 1.1.4  (Apr 22 2013)      *
*****************************************
 
AP121 (AR9331) U-Boot for TL-MR3020
 
DRAM:  32 MB
FLASH: EON EN25Q64 (8 MB)
 
LED on during eth initialization...
 
Hit any key to stop autobooting:  0 
 
uboot>

Gratulacje, Twój router ma nową, lepszą wersję U-Boot!
A jeżeli z jakiegoś powodu Twój router się już nie uruchomił - skontaktuj się ze mną, spróbuję pomóc.

Lista zmian

Jun 19 2013

  • usunięcie błędu powodującego w niektórych wypadkach zawieszanie się routera od razu po podłączeniu zasilania - z tego względu sugeruję wszystkim aktualizację do najnowszej wersji
  • wsparcie dla TL-MR10U ver. 1.x (testowane na ver. 1.0)
  • wsparcie dla TL-MR3220 ver. 2.x (testowane na ver. 2.1)
  • wsparcie dla TL-WR720N ver. 3.x (dotyczy wyłącznie wersji na rynek chiński/azjatycki!)
  • wsparcie dla nowych modeli/serii kości flash: Macronix MX25L128, SST 25VF064C
  • wersja dla TL-WR740N ver. 4 została z powodzeniem przetestowana przez użytkownika z forum OpenWrt na modelu TL-WR741ND ver. 4.2

Apr 22 2013

  • wsparcie dla TL-WR740N ver. 4 (testowane na ver. 4.23)
  • NetConsole
  • automatyczne rozpoznawanie zastosowanej kości flash na podstawie JEDEC ID
  • powrót do instrukcji 0xD8 przy kasowaniu flash (kasowanie bloku 64 KiB)
  • opcja zmiany adresu MAC z poziomu U-Boot
  • kosmetyczna przebudowa stron www
  • usunięcie znalezionych błędów
  • dodanie możliwości kompilacji z innymi ustawieniami taktowania CPU, RAM i magistrali AHB

Mar 29 2013

  • pierwsze wydanie

Gotowe obrazy

Dla osób, które nie chcą samodzielnie kompilować zmodyfikowanego kodu U-Boot przygotowałem paczkę z gotowymi obrazami dla wszystkich aktualnie wspieranych modeli.

Format nazwy plików z obrazem jest następujący: uboot_for_MODEL.bin. Przykładowo, dla TL-MR3020 będzie to plik: uboot_for_mr3020.bin. W archiwum znajduję się również plik z listą sum kontrolnych.

Pobierz: archiwum zawierające gotowe obrazy zmodyfikowanej wersji U-Boot dla routerów TP-Link z układem AR9331.

Kod źródłowy

Paczkę z kodem źródłowym możecie pobrać tutaj. Kod jest w wersji rozwojowej, stabilnej. Sporo elementów w ogóle nie przejrzałem i kilka na pewno wymaga poprawek lub przebudowy, a już na pewno całość potrzebuje porządnego uprzątnięcia (miszmasz w typach stosowanych komentarzy, sporo “TODO” itd.). Na chwilę obecną nie wiem czy ten projekt będę rozwijać dalej na bazie tej wersji U-Boot. Jeżeli tak się stanie i dodam obsługę kolejnych modeli routerów, to kod na pewno trafi do jakiegoś repozytorium, prawdopodobnie GitHub.

Do folderu “toolchain” należy rozpakować wybrany zestaw narzędzi do kompilowania. Ja wykorzystuję toolchain OpenWrt dla platformy AR71xx z wydania AA 12.09-rc1, możecie go pobrać stąd.

W głównym katalogu znajduje się gotowy plik Makefile - kompilacja dla konkretnego modelu, na przykład TL-MR3020: “make mr3020“. Jeżeli kompilacja zakończy się powodzeniem, to wynikowy plik binarny zostanie skopiowany do folderu “bin” w głównym katalogu.

Overclocking i underclocking Atheros AR9331

W trakcie przygotowywania drugiego wydania mojej modyfikacji zbadałem sprawę podkręcania i obniżania taktowań na platformie Atheros AR9331. Okazało się to możliwe i nawet udało mi się przetestować niektóre konfiguracje (pozostawiłem je w pliku ap121.h, szukajcie bloku if-elif z #define CFG_PLL_FREQ), ale nie publikuję gotowych obrazów z innymi niż domyślne zegary z wiadomych powodów - wymaga to wgrania zmienionej wersji U-Boot, co w przypadku problemów po zmianie taktowań może doprowadzić do unieruchomienia routera. Jeżeli ktoś jest bardzo zainteresowany, świadomy konsekwencji i nie wie jak samemu skompilować udostępnione źródła, a chce wersję z innym taktowaniem - proszę o kontakt.

Po więcej informacji dotyczących podkręcania odsyłam do mojego wątku w tej sprawie, umieszczonego na forum openrouter.info. Znajdziecie tam dokładne informacje oraz wyniki testów podkręcania.

Dodatkowe informacje

Wymiana kości flash na większą w tych modelach nie niesie ze sobą już od jakiegoś czasu wymogu kompilowania własnej wersji OpenWrt ze zmienionymi definicjami partycji. OpenWrt od wersji AA (i w aktualnej gałęzi trunk) spodziewa się jedynie partycji z ART na samym końcu flash, a U-Boot na początku.

Jeżeli ktoś jest zainteresowany wymianą RAM/flash w tych routerach lub tylko zaprogramowaną, większą kostką flash - proszę o kontakt. Po wielu już zrealizowanych przeze mnie modyfikacji tych modeli zostało mi sporo elementów.

» komentarzy: 77 «

tech-blog | Nowy projekt: zmodyfikowany U-Boot dla TP-Link WR703N/MR3020/MR3040
Dodany: Piątek, 29 marca 2013 o godzinie: 22:18:54

[...] Projektem tym jest zmodyfikowana wersja bootloadera U-Boot dla routerów TP-Link TL-WR703N, TL-MR3020 oraz TL-MR3040, między innymi z awaryjnym trybem wgrywania firmware przez przeglądarkę i wsparciem dla różnych rozmiarów kości flash. Dokładne informacje, paczkę gotowych obrazów oraz źródła projektu znajdziecie w artykule Zmodyfikowany U-Boot dla TP-Link WR703N/MR3020/MR3040 (Atheros AR9331) z trybem aktualizacji oprogra…. [...]

Pepino
Dodany: Niedziela, 31 marca 2013 o godzinie: 10:39:09

Ok, a co z partycja art? Jezeli mam juz na kosci 16MB posadzony nowy bootloader to co nastepne? OpenWRT? Czy art i dopiero OpenWRT? Skad wziasc zawartosc art?

pepe2k
Dodany: Niedziela, 31 marca 2013 o godzinie: 12:44:12

64 KiB z danymi ART powinieneś ściągnąć ze starej kostki. OpenWRT bez problemu uruchomi się bez danych w partycji ART… po prostu nie będzie działać WiFi. Według niektórych, w ART zapisany jest MAC adres, co jest moim zdaniem nieprawdą. Są tam jedynie dane kalibracyjne/ustawienia do układu radiowego (jakie dokładnie - nie wiem).

W gruncie rzeczy nie ma znaczenia, co wgrasz następne i w jaki sposób.

Nie napisałeś, który bootloader posadziłeś na swojej kostce, ale jeżeli jest to moja wersja, to możesz wgrać partycję ART przez przeglądarkę. Strona do wgrywania ART jest pod adresem 192.168.1.1/art.html

Pepino
Dodany: Niedziela, 31 marca 2013 o godzinie: 13:55:45

Obecnie mam ten od SLBoat (tez ma funkconalnosc www), ale planuje go wymienic na twoj.
Jak najprosciej pozyskac dane art ze starego flasha? Z poziomu bootloadera przez cp.b czy tez mozna je zgrac przez dd z poziomu openwrt?

pepe2k
Dodany: Niedziela, 31 marca 2013 o godzinie: 14:03:57

Najprościej będzie w OpenWrt (zrzuć to do /tmp i potem ściągnij po scp), poczytaj tutaj:
https://forum.openwrt.org/viewtopic.php?id=38722
http://wiki.openwrt.org/doc/howto/generic.backup

Generalnie, sprowadza się to do cat /dev/mtdx /tmp/nazwa_pliku.bin i voil la - odpowiednia partycja zgrana.

Pepino
Dodany: Wtorek, 2 kwietnia 2013 o godzinie: 23:04:18

Czy mógłbyś jeszcze przygotować uboota dla TL-WR703N z flashem 16MB 256 sektorów?

[ciach]
flash size 16777216, sector count = 256
Flash: 16 MB
[ciach]

pepe2k
Dodany: Wtorek, 2 kwietnia 2013 o godzinie: 23:23:09

Tak, ale dopiero w weekend. Przypomnij się w sobotę. Z ciekawości, jaka to kostka i skąd masz?

Pepino
Dodany: Środa, 3 kwietnia 2013 o godzinie: 20:50:54

Winbond 25Q128FVSG 1210
SLBoat sprzedaje na ebay’u oraz aliexpress.

pepe2k
Dodany: Środa, 3 kwietnia 2013 o godzinie: 21:40:06

Mam te same kostki, one mają sektor 4 KiB. Zajrzyj sobie do dokumentacji: http://www.winbond-usa.com/NR/rdonlyres/A5B6C30B-C174-43CF-867E-E1A2F371A07C/0/W25Q128FV.pdf

Ktoś się musiał pomylić, albo to są jednak inne kostki (podróbki?).

Pepino
Dodany: Środa, 3 kwietnia 2013 o godzinie: 22:59:15

Podałem ci oznaczenie przepisane bezpośrednio ze scalaka oraz informację z bootloadera od SLboat (może w jego źródłach wpisał coś na pałę bazując na https://forum.openwrt.org/viewtopic.php?id=32512, albo faktycznie te kostki mają oznaczenie mające się nijak do stanu faktycznego)

http://see.sl088.com/wiki/WR703_16M_Flash (warto zerknąć chociażby dla pomysłowego wyprowadzenia konsoli).

Pepino
Dodany: Środa, 3 kwietnia 2013 o godzinie: 23:16:23

A tutaj jest, co niby zmodyfikował:
http://see.sl088.com/wiki/WR703_Uboot_%E5%B8%A6Web%E7%9A%84Mod%E7%89%88%E6%9C%AC

pepe2k
Dodany: Środa, 3 kwietnia 2013 o godzinie: 23:19:14

Tak to jest jak się ktoś zabiera za coś o czym nie ma zielonego pojęcia… prawdopodobnie liczba sektorów została źle wpisana, a że nigdzie chyba nie jest wykorzystywana, to wszystko działa. Jak możesz, to spróbuj w tym U-boot wykonać jakąś operację erase, tam jest wyświetlany rozmiar sektora.

A adaptery UART-USB montuję wewnątrz tych routerów od jakiegoś roku… żadna nowość.

pepe2k
Dodany: Środa, 3 kwietnia 2013 o godzinie: 23:27:43

Będę miał chwilę w weekend, to sprawdzę dokładnie tę jego wersję, ale z tych zmian, które opisał wynika, że podał albo złe parametry kostki, albo dotyczyły one innej kostki. Chyba, że zmienił coś jeszcze albo operuje na blokach, a nie sektorach, ciężko powiedzieć - może w ogóle te parametry nie mają znaczenia, bo widziałem że też z innej wersji kodu korzystał. Masz u siebie 703N z tym U-bootem od niego?

Pepino
Dodany: Czwartek, 4 kwietnia 2013 o godzinie: 00:24:47

Mam i moge sprawdzic, co chcesz. BTW: on nie lutuje adaptera tylko doprowadza rx i tx z plytki na niepodlaczone piny w micro usb. Po taniosci, dalej trzeba miec zew konwerter, ale puchy juz otwierac nie trzeba, a z zewnatrz brak widocznych przerobek.

pepe2k
Dodany: Czwartek, 4 kwietnia 2013 o godzinie: 20:15:11

Sprawdź czy kasowanie sektorów (erase) działa prawidłowo i kasuje to co chcesz i jaki rozmiar sektora jest podawany przy kasowaniu.

Taki lutowanie TX/RX do gniazda USB to kiepski pomysł. Ktoś się zapomni, podłączy do gniazda bez adaptera i nie wiem jak to się skończy.

Anonim
Dodany: Piątek, 5 kwietnia 2013 o godzinie: 20:34:53

pepe2k szacun za roboto.

Dużo byś miał roboty żeby twój U-Boot dział na flash z sektorami 4 KiB?

pepe2k
Dodany: Piątek, 5 kwietnia 2013 o godzinie: 20:41:44

Dzięki.

W paczce gotowych obrazów są wersje dla kostek z sektorem 4 i 64 KiB. W nazwie pliku jest rozmiar kostki i liczba sektorów. Podziel pierwsze przez drugie i będziesz miał rozmiar sektora ;)

Anonim
Dodany: Piątek, 5 kwietnia 2013 o godzinie: 21:02:13

A myślałeś o U-boot dla innch tp-link mr3420 … itd?

pepe2k
Dodany: Piątek, 5 kwietnia 2013 o godzinie: 21:04:39

Tak, ale muszę mieć dostęp do takiego routera, żeby zrobić dla niego port tej wersji U-Boot. Ktoś musiałby mi pożyczyć :)

Pepino
Dodany: Piątek, 5 kwietnia 2013 o godzinie: 21:19:32

Wykonałem
erase 0×9F000000 +0×10000
i skasował…
… jeden sektor ;P (czyli niby po 64KB)

Wrzuciłem twój bootloader i teraz odlicza się jako:
FLASH: 16 MB (4096 sectors)

pepe2k
Dodany: Piątek, 5 kwietnia 2013 o godzinie: 22:00:36

Muszę w takim razie przyjrzeć się fragmentowi odpowiedzialnemu za operacje na flash.

Wygląda na to, że kasowanie odbywa się blokami, a nie sektorami i chyba inna instrukcja po SPI jest do tego wykorzystywana.

Aktualizacja:
Zgadza się - w kodzie od TP-Link jest błąd… ktoś przyjął założenie, że rozmiar sektora w stosowanej kości flash będzie miał zawsze 64 KiB i zostawili w funkcji kasującej operacje na bloku 64 KiB, a nie sektorze (który może być różny). Aktualnie kasowanie odbywa się przy pomocy instrukcji 0xD8 (kasowanie bloku 64 KiB), zamiast instrukcji 0×20 (kasowanie sektora). Poprawię to i zaktualizuje paczkę gotowych obrazów, tylko muszę się zastanowić, które rozwiązanie przyjąć:

  • zostawić kasowanie blokami 64 KiB i dostosować informację w komendzie erase oraz zakres adresów do bloków - kasowanie będzie odbywać się szybciej, szczególnie przy kostkach z sektorem 4 KiB
  • zamienić instrukcję kasowania blokami na kasowanie sektorami - wtedy aktualne informacje będą prawidłowe, ale przy kostkach z sektorem 4 KiB nadal kasowanie będzie trochę trwać

Muszę to przetestować i wybrać rozwiązanie.

Pepino
Dodany: Sobota, 6 kwietnia 2013 o godzinie: 11:48:52

IMHO drugie podejście jest lepsze, bo jak często czyści się obszar flasha?

BTW: Czy jest jakaś szansa na dorobienie polecenia saveenv, tak jak to jest w uBoocie w innych urządzeniach? Wygodnie wtedy np. ustawić mac czy ip i zapisać to na stałe, bez bawienia się hexedytorem.

pepe2k
Dodany: Sobota, 6 kwietnia 2013 o godzinie: 12:06:25

Chyba w ogóle zmienię koncepcję. Myślę nad całkowitym uniezależnieniem się od zastosowanej kostki flash - całkowity rozmiar, liczbę i rozmiar sektorów można odczytać z kości i to chyba będzie najlepsze podejście. Wtedy pozostanie jedynie podział na wersje dla konkretnych modeli, a kostka będzie rozpoznawana już w trakcie pracy U-Boot. Spróbuję tak to rozwiązać.

Polecenie saveenv istnieje i zapisuje zmiany. Ale w tym konkretnym przypadku (U-Boot dla tych routerów) dane env nie są przechowywane we flash! Tak naprawdę nie są nigdzie przechowywane, są one zapisane na sztywno w kodzie (tzw. hard-coded) więc zmianę można dokonać jedynie na czas pracy (po tym jak U-Boot przeniesie się do i wystartuje z RAM).

Nie chcę tego zmieniać ze względu na zachowanie kompatybilności z tym, co jest na fabrycznej kostce flash - musiałbym przeznaczyć na dane env konkretne miejsce we flash, a najczęściej rozwiązuje się to przez przeznaczenie na to 1 sektora… i tu dochodzimy do sedna sprawy - w przypadku kostek z sektorem 4 KiB nie będzie problemu, bo taki obszar można wygospodarować, ale w przypadku kostki z sektorem 64 KiB nie ma na to szans, bo w 64 KiB za kodem U-Boot znajdują się informacje o MAC adresie itd., a dalej jest już FW i 64 KiB z ART.

A po co Ci zapisywanie danych env? Chodzi o adresy IP? Udało mi się uruchomić na tym U-Boot klienta DHCP więc może to będzie lepsze rozwiązanie :)

Pepino
Dodany: Sobota, 6 kwietnia 2013 o godzinie: 13:22:56

Ipka to drobiazg, bardziej myslalem o kulturalnej mozliwosci zmiany maca na stale. W tych sztukacj, co dostalem mac byl inny, niz na naklejce z obudowy. Pewno wszystkim dawal z lenistwa taki sam ;)

pepe2k
Dodany: Sobota, 6 kwietnia 2013 o godzinie: 13:45:33

Opcję zmiany MAC już zrobiłem jakiś czas temu, muszę tylko to przetestować. Adres MAC jest zapisany we flash, właśnie stamtąd go pobieram (komenda “printmac”) i równie dobrze tam go można zmienić ;)

sz
Dodany: Niedziela, 14 kwietnia 2013 o godzinie: 17:33:07

Ciekawy projekt. Czekam na wersję dla mr3220/3420.

zaspany
Dodany: Środa, 17 kwietnia 2013 o godzinie: 19:12:55

A jak wersja na wdr3600 jestes po testach?

pepe2k
Dodany: Środa, 17 kwietnia 2013 o godzinie: 19:24:54

Na razie męczę WR1043ND :)

len
Dodany: Czwartek, 18 kwietnia 2013 o godzinie: 12:26:39

@pepe2k Czy po zmianie kości na 16 będę mógł wgrać obraz Cezarego dla kości 4? Czy tam 8 w zależności od modelu.

pepe2k
Dodany: Czwartek, 18 kwietnia 2013 o godzinie: 12:30:46

Zacytuję sam siebie (jest w artykule):

“Wymiana kości flash na większą w tych modelach nie niesie ze sobą już od jakiegoś czasu wymogu kompilowania własnej wersji OpenWrt ze zmienionymi definicjami partycji. OpenWrt od wersji AA (i w aktualnej gałęzi trunk) spodziewa się jedynie partycji z ART na samym końcu flash, a U-Boot na początku.”

len
Dodany: Czwartek, 18 kwietnia 2013 o godzinie: 12:40:22

Dzięki chciałem się tylko upewnić.

pepe2k
Dodany: Czwartek, 18 kwietnia 2013 o godzinie: 12:57:43

@len wstrzymaj się z wgrywaniem, bo właśnie testuję i niedługo wrzucam nową wersję

len
Dodany: Poniedziałek, 22 kwietnia 2013 o godzinie: 13:25:30

@pepe2k wstrzymałem się z wgraniem tak jak pisałeś. Jak idą testy nowego U-Boota?

pepe2k
Dodany: Poniedziałek, 22 kwietnia 2013 o godzinie: 14:08:03

Już po testach, aktualizuję artykuł… cierpliwości! ;)

tech-blog | Nowa wersja modyfikacji U-Boot dla routerów TP-Link z układem AR9331 (wydanie Apr 22 2013)
Dodany: Wtorek, 23 kwietnia 2013 o godzinie: 00:32:38

[...] U-Boot dla routerów TP-Link z układem Atheros AR9331. W związku z tym zaktualizowałem także artykuł dotyczący tej modyfikacji. Poniżej lista zmian w najnowszej [...]

Pepino
Dodany: Środa, 24 kwietnia 2013 o godzinie: 21:07:08

BTW: Twój stary bootloader nie był w stanie zrobić update’u przez http://www. tzn. obraz tak, sam bootloader nie. Przez konsole i tftp poszło, chociaż po przetransferowaniu zawsze podawał checksum error…

pepe2k
Dodany: Środa, 24 kwietnia 2013 o godzinie: 21:24:28

Hm… ciekawe, bo u mnie żadnych tego typu problemów nie było na żadnym ze wspieranych modeli - ładowałem na starej wersji zarówno obrazy U-Boot jak i FW lub ART.

Byłeś podpięty bezpośrednio do routera czy przez jakiś switch?

Jaką masz dokładnie wersję routera?

Sprawdź czy w nowej wersji działa wgrywanie obrazu U-Boot (wgraj po prostu ten sam).

Jesteś pewny tego błędu? To nie było raczej “checksum bad”? Bo takiego, o którym piszesz, to w całym kodzie nie znalazłem ;)

Checksum bad to akurat błąd po stronie kodu odpowiedzialnego za odbieranie i przekazywanie dalej ramek z interfejsu sieciowego - w którymś z pakietów nie zgadzała się suma kontrolna i stąd błąd. Ale skąd, to nie mam pojęcia. W każdym razie, sprawdź czy nadal masz ten błąd, to spróbujemy poszukać rozwiązania.

Pepino
Dodany: Środa, 24 kwietnia 2013 o godzinie: 22:54:50

1) 703N ver. 1.6
2) Checksum bad oczywiscie mialem na mysli
3) Jak próbowałem przez strone to lapek z Mintem bezposrednio ethernetem byl spiety z tym 703N, plik sie transferowal, ale efektu nie bylo. Routerek nie chcial sie zrebootowac, chociaz jak zapodalem mu calego gargulca to zrobil to bez problemu.
4) Jak przez tftp to ustawilem w ubocie adres 703N na 192.168.1.100, podpialem go pod port lan mojego 4300, a pod drugim portem lanowym byl zyxel nsa310, na ktorym serwer tftp na potrzeby innych zabawek mam postawiony. Transferowalem kilka razy - ten sam blad. Pobralem ponownie cala paczke, bo juz podejrzewalem, ze plik sie uszkodzil, ale to samo.
5) Na nowym bootloaderze jeszcze nie testowalem, ale jutro na pewno to sprawdze.

pepe2k
Dodany: Środa, 24 kwietnia 2013 o godzinie: 23:19:31

Przy tftp to i u mnie często wywala ten błąd “checksum bad”, ale on chyba nie dotyczy pakietów z danymi, tylko jakichś inicjujących/kończących transakcję. Nigdy się nim nie przejmowałem dopóki rozmiar odebranych danych się zgadzał, a nie zdarzyło się tak, żeby się nie zgadzał i coś było nie tak po zapisaniu danych we flash ;)

Miałeś podpiętą jednocześnie konsolę szeregową przy próbie aktualizacji bootloadera przez www? Jeżeli wystąpił jakiś znany błąd (tzn. taki, którego byłem w stanie się domyślić i obsłużyć), to powinieneś dostać w konsoli informację (typu: “## Error: ….”) o tym co poszło nie tak i dlaczego.

Rozumiem, że po próbie aktualizacji nie miałeś długiej (kilkusekundowej) sekwencji szybko migającej diody LED? Jeżeli nie, to znaczy że w ogóle nie zakończył się etap odbierania danych i program nie wskoczył w tryb kasowania flash i kopiowania danych z RAM.

Jedyne co mi teraz przychodzi do głowy to jakiś nietypowy transfer z przeglądarki… co jest bardzo możliwe, bo ja sprawdzałem tylko najpopularniejsze przeglądarki w praktycznie najnowszych wersjach - w jaki sposób wychodzi od nich żądanie POST, jak wyglądają nagłówki, czy dane rozpoczynają się w pierwszym pakiecie, jak wykryć koniec danych itd. W teorii, spory kawałek mojej implementacji jest zgodny ze standardem HTTP 1.0. W praktyce, różnie to bywa z implementacją po stronie przeglądarki, a i moja implementacja nie jest w 100% zgodna (niektóre rzeczy uprościłem i pominąłem niepotrzebne elementy). Poza tym, równie dobrze problem może leżeć gdzieś w stosie uIP, ciężko powiedzieć. Niemniej, informacja o tym, że aktualizacja firmware poszła bez problemu jest interesująca.

Z czego korzystasz na Mincie? Generalnie, testy robię na przeglądarkach w Windows i w starym Ubuntu.

Daj znać czy w nowej wersji też masz ten problem. Praktycznie nic od strony wgrywania w niej nie zmieniałem, więc powinien nadal występować. Jeżeli rzeczywiście tak jest, to koniecznie podrzuć mi loga z konsoli.

Pepino
Dodany: Czwartek, 25 kwietnia 2013 o godzinie: 11:25:02

Na nowym poszło bez problemu - zarówno przez Chromium (25.0.1364.160), jak i Firefoxa (20).
Ciekawostką dropsa jest to, że po przeflashowaniu samego bootloadera
i po restarcie zawsze jest:

## Error: failed to execute ‘bootcmd’!
HTTP server is starting for firmware update..

Oczywiście po przeflashowaniu całego firmware’u jest ok, ale jakby ktoś chciał zaktualizować _tylko_ uboota to już będzie miał problem…

pepe2k
Dodany: Czwartek, 25 kwietnia 2013 o godzinie: 12:19:05

Skoro masz taki błąd, to znaczy że wcale nie poszło bez problemów, bo najprawdopodobniej obraz U-Boot wylądował w miejscu firmware i stąd problem… jesteś pewien, że ładowałeś obraz U-Boot z odpowiedniej strony (uboot.html)?

Jakieś dziwne jaja się u Ciebie dzieją, więc wklej mi w końcu całego loga z konsoli od podłączenia zasilania do zrobienia aktualizacji obrazów firmware/U-Boot przez www, to będzie jasne gdzie leży problem. Przy takiej komunikacji tutaj, to się będziemy z tym bujać kilka tygodni i nie znajdziemy przyczyny.

Przed chwilą sprawdzałem aktualizację wszystkich 3 typów obrazów na WR703N i MR3020 przez Chrome - zero problemów, wszystko wchodzi prawidłowo :)

Pepino
Dodany: Czwartek, 25 kwietnia 2013 o godzinie: 12:33:16

Teraz to mi niesamowicie wstyd, bo oczywiście pchałem wszystko przez standardowe www tj. do aktualizacji firmware’u ;)
Coś mi się ubzdurało, że to, co użytkownik chce zaktualizować jest automatycznie rozpoznawane po wielkości pliku. Chyba mi się po prostu to przyśniło…

Cóż, nie pozostało mi nic innego jak przeprosić Cię za wprowadzenie w błąd i niepotrzebne zmarnowanie czasu.

pepe2k
Dodany: Czwartek, 25 kwietnia 2013 o godzinie: 12:39:40

Ha ha ha! :D
No nic, kłania się czytanie ze zrozumieniem i zwracanie uwagi na to, gdzie się wchodzi i w co klika ;)

Chyba będę musiał zrobić jeszcze większe nagłówki informujące o typie obrazu, który jest wgrywany.

Dobrze, że to był tylko fałszywy alarm, ale przy okazji znalazłem kilka literówek (m.in. Windbond zamiast Winbond) więc przed chwilą wrzuciłem zaktualizowane obrazy.

Anonim
Dodany: Sobota, 27 kwietnia 2013 o godzinie: 20:47:26

pepe2k na forum.openwrt.org widzę że gość wgrał twój u-boot do MR3220v2:)

pepe2k
Dodany: Sobota, 27 kwietnia 2013 o godzinie: 20:58:41

Tak, bo to też AR9331. Tak naprawdę obsługa nowego modelu to tylko przystosowanie numerów GPIO od przycisku reset i diod LED + nazwa… i tyle :) Ale nie mam 3220v2, więc nie testowałem i nie zrobiłem gotowego obrazu. Chyba zrobię.

Anonim
Dodany: Niedziela, 28 kwietnia 2013 o godzinie: 08:02:44

Czyli jak by zrobic u-boot pod dane CPU to obsługuje się kilka modeli (oczywiście uwzgledniajac GPIO i reset).

Jak masz siły moge Ci podesłać zakurzonego spisanego na testy TL-WR841ND (AR7241) do zabawy.

pepe2k
Dodany: Niedziela, 28 kwietnia 2013 o godzinie: 09:32:17

Teoretycznie tak, ale w praktyce to nie takie proste.

Generalnie, kod U-Boot dzieli się na wsparcie dla konkretnej architektury, potem CPU i na koniec na tzw. board czyli konkretną platformę, z konkretnymi peryferiami, podzespołami, interfejsami itd.

Z punktu widzenia routerów z U-Boot poza architekturą i konkretnym CPU istotny jest jeszcze zastosowany interfejs/y sieciowy/e, który też trzeba przecież nie tylko uruchomić ale umieć obsłużyć jeżeli chcemy z niego skorzystać w U-Boot… chociażby w ramach TFTP.

W przypadku AR9331 sprawa jest w pewnym sensie uproszczona, bo mamy jeden SoC, w którym siedzi już wszystko - CPU, kontroler Ethernet, Wi-Fi, USB… podejrzewam, że w każdym urządzeniu na AR9331 z pamięcią NOR SPI flash moja modyfikacja U-Boot będzie działać. Jedyny problem może być przy GPIO - np. może się okazać, że wgrana wersja z innego modelu ma ustawiony konkretny sygnał jako wyjście dla LED, a na rzeczywistej platformie ten GPIO steruje zasilaniem USB. Ale to już skrajny przypadek.

Możesz podesłać, ale i tak na razie skupiam się na nowszych platformach (aktualnie WDR3600/4300). Zacząłem też męczyć WR1043ND.

MAG
Dodany: Środa, 7 sierpnia 2013 o godzinie: 15:23:19

Czy jest opcja aby zmusić u-boota aby botował z podłączonego do routerapendriva ? Na penie jest zainstalowany mikrotik.

pepe2k
Dodany: Środa, 7 sierpnia 2013 o godzinie: 15:56:25

I tak, i nie. Nie podałeś żadnych szczegółowych informacji, więc nie oczekuj szczegółowej odpowiedzi :)

Daniel
Dodany: Sobota, 24 sierpnia 2013 o godzinie: 09:03:08

Hello!

I just cant get udp console to work with latest uboot release. I tried multiple machines and both windows and linux. must be something with my device.
http works fine though! So my thinking was - why not make a page for changing mac address via http?

I couldnt find the htm files in the sources too.

Thanks for a great mod!

pepe2k
Dodany: Sobota, 24 sierpnia 2013 o godzinie: 10:51:33

Hello Daniel,

This project was moved to GitHub, so new versions and sources are available here: https://github.com/pepe2k/u-boot_mod

Which version and which device are you using now? Have you tried to run Wireshark or any other sniffer and catch UDP/ARP packets and check if there is any communication between your PC and router?

If you still have a problem, please report it, using issue on my GitHub repository: https://github.com/pepe2k/u-boot_mod/issues

HTML files are in this file: https://github.com/pepe2k/u-boot_mod/blob/master/u-boot/httpd/fsdata.c

Regards

tech-blog | Projekt modyfikacji U-Boot dla routerów został przeniesiony na GitHub
Dodany: Sobota, 24 sierpnia 2013 o godzinie: 12:53:05

[...] i gotowe obrazy modyfikacji, a także zgłaszać ewentualne błędy, jest wskazane repozytorium. Mój artykuł dotyczący tej modyfikacji w pewnym sensie stał się przez to nieaktualny, ale pozostawiłem w nim odnośniki do źródeł i [...]

Daniel
Dodany: Sobota, 24 sierpnia 2013 o godzinie: 14:53:14

Hello again, Thanks for your answer!

I’m using tplink wr702 v1.6 and changed my spi flash to a 16Mb version. Using your precompiled version you have here.
My problem is that I changed rom, didnt write the 2:nd block of 64KB (mac etc) and uboot flash with reset pressed down 3 sec only accept 64k images (not 128k)

I cant write it with mtd write neither (”Could not open mtd device: u-boot, Can’t open device for writing!”)

tried wireshark but it wont send any udp packages at all.

So I’m a bit stuck atm :) My idea was to download source and build enviroment and edit the source to accept both 64k and 128k images in uboot.

pepe2k
Dodany: Sobota, 24 sierpnia 2013 o godzinie: 16:07:07

Hello Daniel,

The simplest solution for you, I think, is to connect with device using serial console, change MAC address (using setmac command) and then download second 64 KB block, using TFTP.

If you don’t have access to the serial console, the problem is more complicated. I think, that I forgot to add MAC address validation in one place in the code, so your device probably uses now FF:FF:FF:FF:FF:FF MAC address, which isn’t correct (it’s a broadcast address).

HTTP server is working because it initializes MAC address in another way.

I need to investigate this problem and make some changes in code, so the MAC address will be always validated and in case of wrong data, the fake address will be used.

At this moment, you can download the sources (from my GitHub repository) and take a look at this line: https://github.com/pepe2k/u-boot_mod/blob/master/u-boot/include/configs/ap121.h#L500. It’s a definition of U-Boot image size, so you can just change it to 128 KB and then you will be able to upload 128 KB U-Boot image in HTTP mode.

Regards!

pepe2k
Dodany: Sobota, 24 sierpnia 2013 o godzinie: 20:41:33

Hello Daniel,

I have just checked this issue on my last release. I removed MAC address from FLASH and as I supposed (I checked my sources before), I didn’t have any troubles to run net console. So, something is wrong either with your device or configuration (maybe firewall on your PC?).

Regards

Daniel
Dodany: Sobota, 24 sierpnia 2013 o godzinie: 22:34:29

Hello again

I must have been using an old version, I did a compile of your rep and one modded with 128kb uboot. updated and then uploaded uboot with mac - after this uboot console worked fine. Now wlan works like a charm too! :)

Thanks a lot for your help!

Regards Daniel

pepe2k
Dodany: Sobota, 24 sierpnia 2013 o godzinie: 22:45:38

Hello!

Great news!

Regards,
Piotr

lolo
Dodany: Piątek, 20 września 2013 o godzinie: 10:19:16

@pepe2k: Pisałeś że męczysz 1043nd, jaki wynik ? udało się ?

pepe2k
Dodany: Piątek, 20 września 2013 o godzinie: 10:27:07

Aktualnie skupiam się tylko na nowych urządzeniach. Niedługo będzie wsparcie dla modeli z AR9341.

Niestety, ale na takie “dziadki” jak WR1043NDv1 nie mam już czasu :) Moooże kiedyś, w jakiejś wolnej chwili to skończę.

http://www.tech-blog.pl
Dodany: Środa, 25 września 2013 o godzinie: 10:01:15

Hi,

firstly i want to say thanks a lot for your time and jobs.

I write to you because of i read this;
“https://github.com/pepe2k/u-boot_mod#introduction

4. I would like you to add support for device X.

You can do it yourself and send me a pull request or a patch. If you do not want to, or do not know how to do it, please contact with me directly.”

And I don’t have i don’t know any think.

Can you support support ar9344 for tp-link tl-wvr450g ?

More information about this model has
Atheros AR-9344 mips32 560 Mhz CPU.
Atheros 9381-AL1A - wireless
Atheros AR8327N-AL1A lan/wan
1 console port
128mb(1Gbit) ddr-II ram

you can see more information about tl-wvr450g v2.

http://www.tp-link.com.cn/product_450m_271.html
photos of board;
http://users.axiland.com/tl-wvr450g/01.jpg
http://users.axiland.com/tl-wvr450g/02.jpg
http://users.axiland.com/tl-wvr450g/03.jpg
http://users.axiland.com/tl-wvr450g/04.jpg
http://users.axiland.com/tl-wvr450g/05.jpg
http://users.axiland.com/tl-wvr450g/06.jpg
http://users.axiland.com/tl-wvr450g/07.jpg
http://users.axiland.com/tl-wvr450g/08.jpg
http://users.axiland.com/tl-wvr450g/09.jpg
http://users.axiland.com/tl-wvr450g/10.jpg
http://users.axiland.com/tl-wvr450g/11.jpg
http://users.axiland.com/tl-wvr450g/12.jpg
http://users.axiland.com/tl-wvr450g/13.jpg

http://users.axiland.com/tl-wvr450g.tar.gz

cat ttyUSB-2013-09-25-093857.txt
=~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2013.09.25 09:38:57 =~=~=~=~=~=~=~=~=~=~=~=

Copyright(C) 2001-2012 by TP-LINK TECHNOLOGIES CO., LTD.

________ ________ __ __ ____ _ __ ___
|________|| ___ | | | | || \ | || | / /
| | | |___| | __ __ | | | || \| || |/ /
| | | _____| |__ __| | |___ | || |\ || \
|__| |__| |______||__||_| \____||__|\___\

Software Platform for MIPS

U-Boot 1.1.4 (Jul 4 2012 - 09:32:32)

Autobooting in 1 seconds
ar9344> ?
? - alias for ‘help’
base - print or set address offset
bootp - boot image via network using BootP/TFTP protocol
calibrate- boot up calibrate linux image
cmp - memory compare
cp - memory copy
crc32 - checksum calculation
erase - erase FLASH memory
exit - exit script
flinfo - print FLASH memory information
go - start application at address ‘addr’
help - print online help
loop - infinite loop on address range
md - memory display
mm - memory modify (auto-incrementing)
mtest - simple RAM test
mw - memory write (fill)
nm - memory modify (constant address)
printenv- print environment variables
progmac - Set ethernet MAC addresses
protect - enable or disable FLASH write protection
rarpboot- boot image via network using RARP/TFTP protocol
reset - Perform RESET of the CPU
setenv - set environment variables
test - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
version - print monitor version
ar9344> printenv
bootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 init=/sbin/init mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env),6336k(rootfs),1408k(uImage),64k(mib0),64k(ART)
bootcmd=calibrate normal;go 0×9f040000
bootdelay=1
baudrate=115200
ethaddr=0×00:0xaa:0xbb:0xcc:0xdd:0xee
ipaddr=192.168.1.10
serverip=192.168.1.27
dir=
lu=tftp 0×80060000 ${dir}u-boot.bin&&erase 0×9f000000 +$filesize&&cp.b $fileaddr 0×9f000000 $filesize
lf=tftp 0×80060000 ${dir}db12x${bc}-jffs2&&erase 0×9f050000 +0×630000&&cp.b $fileaddr 0×9f050000 $filesize
lk=tftp 0×80060000 ${dir}vmlinux${bc}.lzma.uImage&&erase 0×9f680000 +$filesize&&cp.b $fileaddr 0×9f680000 $filesize
stdin=serial
stdout=serial
stderr=serial
ethact=eth0

Environment size: 698/65532 bytes
ar9344>

Thanks for your time and job.

PS: I want to write email but i cannot find your email.
And my English is not good, i don’t know your language.
I use google translate.

Fakier
Dodany: Sobota, 28 grudnia 2013 o godzinie: 00:31:25

“Wymiana kości flash na większą w tych modelach nie niesie ze sobą już od jakiegoś czasu wymogu kompilowania własnej wersji OpenWrt ze zmienionymi definicjami partycji. OpenWrt od wersji AA (i w aktualnej gałęzi trunk) spodziewa się jedynie partycji z ART na samym końcu flash, a U-Boot na początku.”

Czy to zadziała też dla mr3420 v2.2 ?
Czy ktoś już tego próbował - odczytać starą kość (z wgranym OpenWrt) hex edytorem przenieść ATR z końca “małego” flash na koniec “dużego” flash? Bez modyfikacji uBoot.

pepe2k
Dodany: Sobota, 28 grudnia 2013 o godzinie: 11:51:33

Tak, zadziała. Ale poza ART (końcowe 64 KB) trzeba przenieść też początkowe 128 KB ze starej kości (obraz U-Boot plus dane typu MAC adres itd.).

satsatt
Dodany: Sobota, 15 lutego 2014 o godzinie: 23:50:10

Thank’s to google translator i bricket it.

It changed the adresses of the commands for hornet - puuh

Michał
Dodany: Czwartek, 13 marca 2014 o godzinie: 16:44:24

Gdzie można kupić WR703N za 18 dolców?

pepe2k
Dodany: Piątek, 14 marca 2014 o godzinie: 11:55:23

W Internecie.

Fakier
Dodany: Czwartek, 26 czerwca 2014 o godzinie: 20:35:39

Witam, poczyniłem pewne testy w sprawie podmiany kości flash w mr-3420v2.

Odczytałem starą kość (S25FL032P).
modyfikacje zgodnie z opisem (przynajmniej tak mi się wydaje)
64KB z końca flash 4M przeniesione na koniec pamięci 16M (EN25Q128):

0×00000000 - 0×003F0000 - bez zmian
0×003F0000 - 0×003FFFFF - ATR - skopiowany na koniec, miejsce wypełnione FF
0×00400000 - 0×00FEFFFF - FF
0×00FF0000 - 0×00FFFFFF - ATR

router po starcie zapala wszystkie LED, potem gasną i zostaje zapalona tylko pierwsza… no i tyle :)

wydaje mi się, że stary (oryginalny) uboot nie rozpoznaje automatycznie rozmiaru pamięci flash, jeżeli ma ktoś gotowy (skompilowany) uboot do tego router, to bardzo poproszę o same 64KB na greatlukas@o2.pl :) resztę zrobię sam.
W międzyczasie będę próbował sam go skompilować, niestety nie robiłem tego wcześniej, także wszelka pomoc mile widziana :)

Pozdrawiam

pepe2k
Dodany: Czwartek, 26 czerwca 2014 o godzinie: 20:41:13

Nie potrzebujesz specjalnej wersji dla kości o innej pojemności. Prawdopodobnie coś poszło nie tak przy zgrywaniu oryginalnego wsadu lub programowaniu nowej kości.

Fakier
Dodany: Czwartek, 26 czerwca 2014 o godzinie: 22:40:08

zgrywanie wsadu z kości 4M poszło OK, bo potem uwaliłem wgrywając soft przez MDT, więc zmuszony byłem do wgrania wcześniej zgranego wsadu flash i wszysktko ruszyło,
programowanie nowej raczej też poszło OK - veryfikacja poprawna, także nie wiem co może być jeszcze nie tak

pepe2k
Dodany: Czwartek, 26 czerwca 2014 o godzinie: 23:27:56

Oryginalny U-Boot TP-Linka działał z każdą znaną mi kością. Nigdy nie miałem też takich problemów z MR3420v2, a trochę ich się u mnie przewinęło.

Fakier
Dodany: Piątek, 27 czerwca 2014 o godzinie: 07:26:51

OK, chyba wiem w czym jest problem,
forum openrouter znalazłem Twój post który mówi że:

“Te flashe EN25Q64 mają inną strukturę - sektor 4KB, w MR3020 i WR703N są kostki z sektorem 64KB. Bez zbudowania na nowo u-boota nie ruszy, co mogę już potwierdzić.”

także, albo muszę kupić inną kostkę, albo pobawić się w kompilowanie.

Masz może jakiś gotowy obraz maszyny wirtualnej z lunuxem, kompilatorem, bibliotekami itp. itd. którym mógłbyś się podzielić :)
byłbym bardzo wdzięczny :)

Jeszcze jedna ciekawostka:
wcześniej zgrywałem soft openwrt i “przerabiałem” go na 16M, wynik opisany powyżej,
ale po wgraniu oryginalnego softu tplinka (najnowszy polski, najnowszy rosyjki też nie wystartował) po “przerobieniu” flash na 16M router wystartował, kontrolki zapalają się, jak się podłączy skrętkę, ale nie działał DHCP, musiałem sam ustawić IP, a po wejściu do ustawień i próbie zapisu zmian -> brak komunikacji z routerem.

pepe2k
Dodany: Piątek, 27 czerwca 2014 o godzinie: 09:51:00

To bardzo stary post, nieaktualny. U-Boot w TP-Linku operuje na blokach, nie na sektorach, więc ruszy z każdą kością tego typu.

Nadal uważam, że szukasz przyczyny w złym miejscu.

Fakier
Dodany: Piątek, 27 czerwca 2014 o godzinie: 10:17:41

Zrobiłem wszystko tak jak opisane, chyba że coś pominąłem, mogę wysłać wsada 4M i 16M po modyfikacjach, może rzeczywiście coś pomieszałem

pepe2k
Dodany: Piątek, 27 czerwca 2014 o godzinie: 10:26:22

Podeślij.

Wojciech
Dodany: Wtorek, 19 sierpnia 2014 o godzinie: 09:41:15

Witam,

Wykonałem polecenia podane na stronie i ruter teraz nie uruchamia się wogóle. Uboot-a flashowałem z wersji WR741, na którym działa bez problemu. Nieudana próba upgrade dotyczy rutera WR740ND ver.4.21. W tej chwili po zresetowaniu routera swieci się jedynie dioda zasilania, putty nie odpowiada, prosze o pomoc.

Pozdrawiam

pepe2k
Dodany: Wtorek, 19 sierpnia 2014 o godzinie: 10:08:47

No to ubity. Pozostaje jedynie demontaż kości FLASH i zaprogramowanie jej w zewnętrznym programatorze.

marecki
Dodany: Poniedziałek, 17 listopada 2014 o godzinie: 10:16:35

czesc,

czy flash MICRON M25P16-VMN6P bedzie chodzil z z Twoim u-bootem na wr740n?
http://www.tme.eu/pl/details/m25p16-vmn6p/pamieci-flash-szeregowe/micron/#

pepe2k
Dodany: Poniedziałek, 17 listopada 2014 o godzinie: 12:49:44

Działać może i będzie, ale 16 Mbit to 2 MB… trochę za mało :)

» dodaj komentarz «





» Komentarze dodane przez niezarejestrowanych użytkowników muszą być zatwierdzone przez moderatora


» kategorie wpisów

Co nowego na stronie (wpisów: 43)
Dzikie.NET (wpisów: 16)
Humor (wpisów: 46)
Inne (wpisów: 34)
Kapsle Tymbark (wpisów: 29)
Moje projekty i pomysły (wpisów: 43)
Narzekam na… (wpisów: 16)
Nowości w galerii (wpisów: 12)
Nowości, ciekawostki (wpisów: 595)
O mnie (wpisów: 36)
Wordpress (wpisów: 1)
Zabawki (wpisów: 9)
Zdjęcie bez komentarza (wpisów: 91)
Zdjęcie z komentarzem (wpisów: 23)
Strony w domenie tech-blog.pl wykorzystują pliki cookies w celach statystycznych, analizy oglądalności oraz na potrzeby wyświetlania reklam. Jeżeli nie wyrażasz na to zgody, zmień ustawienia wykorzystywanej przeglądarki internetowej. Więcej informacji na stronie Polityka prywatności i cookies (ciasteczka).

» najnowsze zdjęcia w galerii

NXP EXPLORE-NFC #1NXP EXPLORE-NFC #3

» archiwum wpisów

styczeń 2014 (wpisów: 2)
grudzień 2013 (wpisów: 6)
listopad 2013 (wpisów: 27)
październik 2013 (wpisów: 21)
wrzesień 2013 (wpisów: 27)
sierpień 2013 (wpisów: 8)
lipiec 2013 (wpisów: 8)
czerwiec 2013 (wpisów: 6)
maj 2013 (wpisów: 16)
kwiecień 2013 (wpisów: 17)
marzec 2013 (wpisów: 18)
luty 2013 (wpisów: 22)
styczeń 2013 (wpisów: 19)
grudzień 2012 (wpisów: 20)
listopad 2012 (wpisów: 33)
październik 2012 (wpisów: 25)
wrzesień 2012 (wpisów: 15)
maj 2012 (wpisów: 1)
kwiecień 2012 (wpisów: 1)
marzec 2012 (wpisów: 1)
styczeń 2012 (wpisów: 2)
grudzień 2011 (wpisów: 1)
listopad 2011 (wpisów: 7)
październik 2011 (wpisów: 4)
wrzesień 2011 (wpisów: 1)
sierpień 2011 (wpisów: 3)
lipiec 2011 (wpisów: 2)
czerwiec 2011 (wpisów: 3)
maj 2011 (wpisów: 1)
marzec 2011 (wpisów: 3)
luty 2011 (wpisów: 5)
styczeń 2011 (wpisów: 5)
grudzień 2010 (wpisów: 6)
listopad 2010 (wpisów: 2)
październik 2010 (wpisów: 1)
wrzesień 2010 (wpisów: 4)
sierpień 2010 (wpisów: 2)
lipiec 2010 (wpisów: 4)
kwiecień 2010 (wpisów: 4)
marzec 2010 (wpisów: 12)
luty 2010 (wpisów: 4)
styczeń 2010 (wpisów: 1)
listopad 2009 (wpisów: 1)
październik 2009 (wpisów: 1)
wrzesień 2009 (wpisów: 1)
sierpień 2009 (wpisów: 3)
lipiec 2009 (wpisów: 2)
czerwiec 2009 (wpisów: 6)
kwiecień 2009 (wpisów: 1)
marzec 2009 (wpisów: 25)
luty 2009 (wpisów: 9)
styczeń 2009 (wpisów: 13)
grudzień 2008 (wpisów: 7)
listopad 2008 (wpisów: 11)
październik 2008 (wpisów: 1)
wrzesień 2008 (wpisów: 9)
sierpień 2008 (wpisów: 49)
lipiec 2008 (wpisów: 2)
czerwiec 2008 (wpisów: 39)
maj 2008 (wpisów: 52)
kwiecień 2008 (wpisów: 49)
marzec 2008 (wpisów: 58)
luty 2008 (wpisów: 38)
styczeń 2008 (wpisów: 12)
grudzień 2007 (wpisów: 16)
listopad 2007 (wpisów: 2)
październik 2007 (wpisów: 8)
wrzesień 2007 (wpisów: 16)
sierpień 2007 (wpisów: 7)
lipiec 2007 (wpisów: 3)
czerwiec 2007 (wpisów: 3)
maj 2007 (wpisów: 11)
kwiecień 2007 (wpisów: 11)
marzec 2007 (wpisów: 16)
luty 2007 (wpisów: 9)
styczeń 2007 (wpisów: 13)
grudzień 2006 (wpisów: 5)
listopad 2006 (wpisów: 4)
październik 2006 (wpisów: 13)
wrzesień 2006 (wpisów: 15)
sierpień 2006 (wpisów: 8)
lipiec 2006 (wpisów: 5)
czerwiec 2006 (wpisów: 39)
maj 2006 (wpisów: 38)
All rights reserved Copyright 2006-2012 Piotr Dymacz