Add support for ALFA NETWORK Hornet-UB (AR9331 based)
[oweals/u-boot_mod.git] / READMEPL.md
1 Modyfikacja U-Boot 1.1.4 dla routerów
2 ==========
3
4 Gotowe obrazy testowe
5 ---------------------
6 Począwszy od 24.09.2016, gotowe obrazy, kompilowane na **Raspberry Pi 3** przy pomocy toolchain z **LEDE**, są dostępne na **[moim serwerze](http://projects.dymacz.pl)**.
7
8 Obrazy są budowane i przesyłane na FTP tylko jeżeli w głównej gałęzi repozytorium zaszły jakieś zmiany - dedykowany skrypt sprawdza to raz dziennie. Na FTP znajduje sie również toolchain wykorzystany do budowania obrazów.
9
10 Spis treści
11 -----------
12
13 - [Wstęp](#wstęp)
14 - [Wspierane urządzenia](#wspierane-urządzenia)
15 - [Znane błędy](#znane-błędy)
16 - [Modyfikacje, zmiany](#modyfikacje-zmiany)
17         - [Serwer web](#serwer-web)
18         - [Konsola sieciowa](#konsola-sieciowa)
19         - [Zapisywalne zmienne środowiskowe](#zapisywalne-zmienne-środowiskowe)
20         - [Inne](#inne)
21         - [Automatycznie rozpoznawane kości FLASH](#automatycznie-rozpoznawane-kości-flash)
22 - [Jak to zainstalować?](#jak-to-zainstalować)
23         - [Uwagi, kopie zapasowe](#uwagi-kopie-zapasowe)
24         - [Przy pomocy programatora FLASH](#przy-pomocy-programatora-flash)
25         - [Przy pomocy UART, konsoli U-Boot i serwera TFTP](#przy-pomocy-uart-konsoli-u-boot-i-serwera-tftp)
26                 - [Ważna informacja!](#ważna-informacja)
27                 - [Instrukcja krok po kroku](#instrukcja-krok-po-kroku)
28         - [Przy pomocy OpenWrt](#przy-pomocy-openWrt)
29         - [Przy pomocy DD-WRT](#przy-pomocy-dd-wrt)
30 - [Jak korzystać z tej modyfikacji?](#jak-korzystać-z-tej-modyfikacji)
31 - [Jak samodzielnie skompilować kod?](#jak-samodzielnie-skompilować-kod)
32 - [FAQ](#faq)
33 - [Licencja, przestarzałe źródła itd.](#licencja-przestarzałe-źródła-itd)
34 - [Podziękowania](#podziękowania)
35
36 Wstęp
37 -----
38
39 W dużym skrócie, projekt ten jest modyfikacją źródeł **U-Boot 1.1.4**, przede wszystkim z archiwum udostęþnionego przez firmę **TP-Link**. Niektóre fragmenty kodu zostały zaczerpnięte również ze źródeł innych producentów, takich jak **D-Link**, **Netgear**, **ZyXEL** i **Belkin**. Wszystkie te firmy korzystają z SDK Qualcomm/Atheros, które zawiera właśnie zmodyfikowane źródła **U-Boot 1.1.4**.
40
41 Oryginalne wersje źródeł można pobrać z poniższych stron:
42
43 - [TP-Link GPL Code Center](http://www.tp-link.com/en/support/gpl/ "TP-Link GPL Code Center")
44 - [D-Link GPL Source Code Support](http://tsd.dlink.com.tw/GPL.asp "D-Link GPL Source Code Support")
45 - [NETGEAR Open Source Code for Programmers (GPL)](http://kb.netgear.com/app/answers/detail/a_id/2649/~/netgear-open-source-code-for-programmers-%28gpl%29 "NETGEAR Open Source Code for Programmers (GPL)")
46 - [ZyXEL GPL-OSS](http://www.zyxel.com/us/en/form/gpl_oss_form.shtml "ZyXEL GPL-OSS")
47 - [Belkin Open Source Code Center](http://www.belkin.com/us/support-article?articleNum=51238 "Belkin Open Source Code Center")
48
49
50 Pomysł na tę modyfikację został zaczerpnięty z innego projektu, przeznaczonego dla bardzo popularnego, małego routera mobilnego **TP-Link TL-WR703N**, w którym autor umieścił tryb ratunkowy dostępny przez przeglądarkę: **[wr703n-uboot-with-web-failsafe](http://code.google.com/p/wr703n-uboot-with-web-failsafe/)**. Przez jakiś czas z powodzeniem używałem tej modyfikacji, ale postanowiłem ją ulepszyć, dodać kilka opcji i wsparcie dla innych modeli oraz wszystkich przeglądarek.
51
52 Pierwszą wersję mojej modyfikacji zaprezentowałem na forum **OpenWrt**, w [tym wątku](https://forum.openwrt.org/viewtopic.php?id=43237), pod koniec marca 2013 roku. Zawierała ona wsparcie wyłącznie dla modeli TP-Link z układem SoC **Atheros AR9331**. Obecnie, wspierane są również urządzenia innych producentów, w tym z układami SoC **Atheros AR934x**, **Qualcomm Atheros QCA953x**, **Qualcomm Atheros QCA955x**, a inne (w najbliższych planach jest wsparcie dla routerów z układami z serii **Qualcomm Atheros QCA956x** oraz **MediaTek MT762x**) są w trakcie opracowania.
53
54 Dodatkowe informacje o niniejszej modyfikacji można znaleźć również na [moim blogu](http://www.tech-blog.pl), w [tym artykule](http://www.tech-blog.pl/2013/03/29/zmodyfikowany-u-boot-dla-routerow-tp-link-z-atheros-ar9331-z-trybem-aktualizacji-oprogramowania-przez-www-i-konsola-sieciowa-netconsole/).
55
56 Jeżeli spodobał Ci się ten projekt i chciałbyś wspomóc mnie w jego dalszym rozwijaniu - [postaw mi piwo](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=FN3XW36YHSY2S&lc=US&item_name=For%20a%20great%20job%21&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted)!
57
58 Wspierane urządzenia
59 --------------------
60
61 Lista obecnie wspieranych urządzeń:
62
63 - **Atheros AR9331**:
64   - 8devices Carambola 2 (w wersji z płytką developerską, [zdjęcia w mojej galerii](http://galeria.tech-blog.pl/8devices_Carambola_2/))
65   - ALFA NETWORK Hornet-UB/Hornet-UB-64 (aka Hornet-UB x2)
66   - TP-Link TL-MR3020 v1 ([zdjęcia w mojej galerii](http://galeria.tech-blog.pl/TPLINK_TL-MR3020/))
67   - TP-Link TL-MR3040 v1 i v2
68   - TP-Link TL-WR703N v1, ([zdjęcia w mojej galerii](http://galeria.tech-blog.pl/TPLINK_TL-WR703N/))
69   - TP-Link TL-WR720N v3 (wersja przeznaczona na rynek chiński)
70   - TP-Link TL-WR710N v1 (wersja przeznaczona na rynek europejski, [zdjęcia w mojej galerii](http://galeria.tech-blog.pl/TP-Link_TL-WR710N-EU/))
71   - TP-Link TL-MR10U v1 ([zdjęcia w mojej galerii](http://galeria.tech-blog.pl/TP-Link_TL-MR10U/))
72   - TP-Link TL-MR13U v1
73   - TP-Link TL-WR740N v4 (i podobne, jak na przykład TL-WR741ND v4)
74   - TP-Link TL-MR3220 v2
75   - Moduł GS-Oolite/Elink EL-M150 na płytce developerskiej ([zdjęcia w mojej galerii](http://galeria.tech-blog.pl/Elink_EL-M150_Development-Board/))
76   - Dragino 2 (MS14)
77   - Village Telco Mesh Potato 2 (bazuje na Dragino MS14)
78   - GL.iNet 64xxA ([zdjęcia w mojej galerii](http://galeria.tech-blog.pl/GLiNet/))
79   - Black Swift
80
81 - **Atheros AR1311 (bliźniaczy układ AR9331)**
82   - D-Link DIR-505 H/W ver. A1 ([zdjęcia w mojej galerii](http://galeria.tech-blog.pl/D-Link_DIR-505/))
83
84 - **Atheros AR9341**:
85   - TP-Link TL-MR3420 v2
86   - TP-Link TL-WR841N/D v8
87   - TP-Link TL-WA830RE v2
88   - TP-Link TL-WA801ND v2
89   - YunCore CPE870
90
91 - **Atheros AR9344**:
92   - TP-Link TL-WDR3600 v1
93   - TP-Link TL-WDR43x0 v1
94   - TP-Link TL-WDR3500 v1
95
96 - **Qualcomm Atheros QCA953x**:
97   - TP-Link TL-WR841N/D v9, v10, v11
98   - TP-Link TL-WR820N (wersja przeznaczona na rynek chiński)
99   - TP-Link TL-WR802N
100   - Wallys DR531
101   - Zbtlink ZBT-WE1526
102   - Comfast CF-E314N
103   - Comfast CF-E320N v2
104   - Comfast CF-E520N/CF-E530N
105   - YunCore AP90Q
106   - YunCore CPE830
107
108 Przetestowałem swoją modyfikację na większości z wymienionych powyżej urządzeń, z obrazami OpenWrt i oficjalnym firmware producenta. Jeżeli nie jesteś pewien wersji sprzętowej swojego urządzenia, proszę skontaktuj się ze mną **zanim** dokonasz wymiany obrazu bootloadera. Zmiana na niewłaściwą wersję najprawdopodobniej doprowadzi do uszkodzenia Twojego urządzenia i jedyną możliwością jego ponownego uruchomienia będzie przeprogramowanie kości FLASH w zewnętrznym programatorze.
109
110 Dodatkowe informacje o wspieranych urządzeniach:
111
112 | Model | SoC | FLASH | RAM | Obraz U-Boot | U-Boot env |
113 |:--- | :--- | ---: | ---: | ---: | ---: |
114 | [8devices Carambola 2](http://8devices.com/carambola-2) | AR9331 | 16 MiB | 64 MiB DDR2 | 256 KiB | 64 KiB, R/W |
115 | [ALFA NETWORK Hornet-UB](https://wiki.openwrt.org/toh/alfa.network/hornet-ub) | AR9331 | 8/16 MiB | 32/64 MiB DDR1 | 256 KiB | R/W |
116 | [TP-Link TL-MR3020 v1](http://wiki.openwrt.org/toh/tp-link/tl-mr3020) | AR9331 | 4 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
117 | [TP-Link TL-MR3040 v1/2](http://wiki.openwrt.org/toh/tp-link/tl-mr3040) | AR9331 | 4 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
118 | [TP-Link TL-WR703N](http://wiki.openwrt.org/toh/tp-link/tl-wr703n) | AR9331 | 4 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
119 | [TP-Link TL-WR720N v3](http://wiki.openwrt.org/toh/tp-link/tl-wr720n) | AR9331 | 4 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
120 | [TP-Link TL-WR710N v1](http://wiki.openwrt.org/toh/tp-link/tl-wr710n) | AR9331 | 8 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
121 | [TP-Link TL-MR10U v1](http://wiki.openwrt.org/toh/tp-link/tl-mr10u) | AR9331 | 4 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
122 | [TP-Link TL-MR13U v1](http://wiki.openwrt.org/toh/tp-link/tl-mr13u) | AR9331 | 4 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
123 | [TP-Link TL-WR740N v4](http://wiki.openwrt.org/toh/tp-link/tl-wr740n) | AR9331 | 4 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
124 | [TP-Link TL-MR3220 v2](http://wiki.openwrt.org/toh/tp-link/tl-mr3420) | AR9331 | 4 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
125 | GS-Oolite/Elink EL-M150 module | AR9331 | 4/8/16 MiB | 64 MiB DDR2 | 64 KiB, LZMA | RO |
126 | [Dragino 2 (MS14)](http://wiki.openwrt.org/toh/dragino/ms14) | AR9331 | 16 MiB | 64 MiB DDR1 | 192 KiB | R/W |
127 | Village Telco Mesh Potato 2 | AR9331 | 16 MiB | 64 MiB DDR1 | 192 KiB | R/W |
128 | [GL.iNet](http://wiki.openwrt.org/toh/gl-inet/gl-inet) | AR9331 | 8/16 MiB | 64 MiB DDR1 | 64 KiB | RO |
129 | [Black Swift](http://www.black-swift.com) | AR9331 | 16 MiB | 64 MiB DDR2 | 128 KiB, LZMA | R/W |
130 | [TP-Link TL-MR3420 v2](http://wikidevi.com/wiki/TP-LINK_TL-MR3420_v2) | AR9341 | 4 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
131 | [TP-Link TL-WR841N/D v8](http://wiki.openwrt.org/toh/tp-link/tl-wr841nd) | AR9341 | 4 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
132 | [TP-Link TL-WA830RE v2](http://wikidevi.com/wiki/TP-LINK_TL-WA830RE_v2) | AR9341 | 4 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
133 | [TP-Link TL-WA801ND v2](http://wikidevi.com/wiki/TP-LINK_TL-WA801ND_v2) | AR9341 | 4 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
134 | [TP-Link TL-WDR3600 v1](http://wiki.openwrt.org/toh/tp-link/tl-wdr3600) | AR9344 | 8 MiB | 128 MiB DDR2 | 64 KiB, LZMA | RO |
135 | [TP-Link TL-WDR43x0 v1](http://wiki.openwrt.org/toh/tp-link/tl-wdr4300) | AR9344 | 8 MiB | 128 MiB DDR2 | 64 KiB, LZMA | RO |
136 | [TP-Link TL-WDR3500 v1](http://wiki.openwrt.org/toh/tp-link/tl-wdr3500) | AR9344 | 8 MiB | 128 MiB DDR2 | 64 KiB, LZMA | RO |
137 | [D-Link DIR-505 H/W ver. A1](http://wiki.openwrt.org/toh/d-link/dir-505) | AR1311 | 8 MiB | 64 MiB DDR2 | 64 KiB, LZMA | RO |
138 | [TP-Link TL-WR841N/D v9/10/11](https://wiki.openwrt.org/toh/tp-link/tl-wr841nd) | QCA9533 | 4 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
139 | [TP-Link TL-WR820N](https://wiki.openwrt.org/toh/tp-link/tl-wr820n) | QCA9531 | 4 MiB | 64 MiB DDR2 | 64 KiB, LZMA | RO |
140 | [TP-Link TL-WR802N](https://wikidevi.com/wiki/TP-LINK_TL-WR802N_v1.0) | QCA9533 | 4 MiB | 32 MiB DDR1 | 64 KiB, LZMA | RO |
141 | Wallys DR531 | QCA9531 | 8 MiB | 64 MiB DDR2 | 192 KiB | R/W |
142 | Zbtlink ZBT-WE1526 | QCA9531 | 16 MiB | 128 MiB DDR2 | 256 KiB | R/W |
143 | Comfast CF-E314N | QCA9531 | 16 MiB | 64 MiB DDR2 | 64 KiB, LZMA | RO |
144 | Comfast CF-E320N v2 | QCA9531 | 16 MiB | 64 MiB DDR2 | 64 KiB, LZMA | RO |
145 | Comfast CF-E520N/CF-E530N | QCA9531 | 8 MiB | 32 MiB DDR2 | 64 KiB, LZMA | RO |
146 | YunCore AP90Q | QCA9531 | 16 MiB | 128 MiB DDR2 | 256 KiB | R/W |
147 | YunCore CPE830 | QCA9531 | 16 MiB | 64 MiB DDR2 | 256 KiB | R/W |
148 | YunCore CPE870 | AR9341 | 8 MiB | 64 MiB DDR2 | 64 KiB, LZMA | R/W |
149
150 *(LZMA) - obraz binarny U-Boot został dodatkowo skompresowany przy pomocy LZMA.*  
151 *(R/W) - zmienne środowiskowe przechowywane są w osobnym bloku FLASH, co pozwala na ich zachowanie po odłączeniu zasilaniu.*  
152 *(RO) - zmienne środowiskowe są wbudowane w obraz binarny, można je zmieniać i dodawać nowe wyłącznie w trakcie pracy urządzenia, po ponownym uruchomieniu zostaną przywrócone domyślne wartości.*
153
154 Znane błędy
155 -----------
156
157 Dostępna obecnie wersja nie ładuje jądra Linuxa z niektórych wydań oficjalnego firmware TP-Link. Jeżeli zamierzasz używać OFW, w którymś ze wspieranych modeli tego producenta, nie używaj mojej modyfikacji. Pracuję nad rozwiązaniem tego problemu.
158
159 Modyfikacje, zmiany
160 -------------------
161
162 ### Serwer web
163
164 Najistotniejszą zmianą jest dodanie serwera web, bazującego na **[stosie TCP/IP uIP 0.9](http://www.gaisler.com/doc/net/uip-0.9/doc/html/main.html)**. Umożliwia to aktualizację obrazów **firmware**, **U-Boot** i **ART** (Atheros Radio Test) bezpośrednio z poziomu przeglądarki, bez potrzeby dostępu do konsoli szeregowej i uruchamiania serwera TFTP. Podobny tryb ratunkowy, również bazujący na stosie TCP/IP uIP 0.9, dostępny jest od dawna w routerach **D-Link**.
165
166 Serwer posiada 7 stron www:
167
168 1. index.html (aktualizacja obrazu firmware, zrzut ekranu poniżej)
169 2. uboot.html (aktualizacja obrazu U-Boot)
170 3. art.html (aktualizacja danych kalibracyjnych ART)
171 4. flashing.html
172 5. 404.html
173 6. fail.html
174 7. style.css
175
176 ![](http://www.tech-blog.pl/wordpress/wp-content/uploads/2015/11/uboot_mod_firmware_upgrade.jpg)
177
178 ![](http://www.tech-blog.pl/wordpress/wp-content/uploads/2015/11/uboot_mod_firmware_upgrade_progress.jpg)
179
180 ![](http://www.tech-blog.pl/wordpress/wp-content/uploads/2015/11/uboot_mod_uboot_upgrade.jpg)
181
182 ### Konsola sieciowa
183
184 Drugą, równie użyteczną opcją, jest konsola sieciowa (wchodzi ona w skład oficjalnej gałęzi U-Boot, ale nie jest domyślnie dostępna w żadnym ze wspieranych urządzeń). Konsola sieciowa umożliwia komunikację z konsolą U-Boot przez sieć Ethernet, wykorzystując protokół UDP (domyślny port: 6666, adres IP routera: 192.168.1.1).
185
186 ![](http://www.tech-blog.pl/wordpress/wp-content/uploads/2013/04/u-boot_mod_for_tp-link_with_ar9331_netconsole.jpg)
187
188 ### Zapisywalne zmienne środowiskowe
189
190 U-Boot wykorzystuje tak zwane "**zmienne środowiskowe**", w których przechowywane są wartości wielu ustawień, takich jak adresy IP urządzenia i serwera zdalnego dla transakcji TFTP, prędkość konsoli szeregowej, polecenie do załadowania kernela itd. Zmienne te zapisywane są zazwyczaj w osobnym sektorze FLASH lub w jego części, co umożliwia zachowanie zmian na stałe.
191
192 Żaden z popularnych producentów nie udostępnia tej funkcjonalności i w swoich wersjach U-Boot wykorzystuje zmienne środowiskowe "**tylko do odczytu**" (wartości zmiennych są wbudowane w obraz U-Boot), co oznacza że wszelkie zmiany wprowadzone w trakcie pracy bootloadera zostaną utracone po ponownym uruchomieniu urządzenia i nie ma żadnej możliwość zapisania ich w pamięci FLASH.
193
194 Ta modyfikacja używa zapisywalnych zmiennych środowiskowych w prawie wszystkich wspieranych urządzeniach, co daje możliwość wykonania na przykład:
195
196 ```
197 uboot> setenv ipaddr 192.168.1.100
198 uboot> saveenv
199 Saving environment to FLASH...
200
201 Erase FLASH from 0x9F010000 to 0x9F01FFFF in bank #1
202 Erasing: #
203
204 Erased sectors: 1
205
206 Writing at address: 0x9F010000
207
208 uboot> reset
209 ```
210
211 Spowoduje to zmianę adresu IP urządzenia i zapisanie zmienionych zmiennych środowiskowych we FLASH. Od kolejnego uruchomienia urządzenie będzie wykorzystywać nowy adres.
212
213 Wykorzystując polecenie **run** i zmienne środowiskowe możesz pisać niestandardowe, niewielkie skrypty jak ten poniżej, wykorzystywany do aktualizacji firmware metodą TFTP:
214
215 ```
216 uboot> printenv
217 [...]
218 firmware_addr=0x9F020000
219 firmware_name=firmware.bin
220 firmware_upg=if ping $serverip; then tftp $loadaddr $firmware_name && erase $firmware_addr +$filesize && cp.b $loadaddr $firmware_addr $filesize && echo OK!; else echo ERROR! Server not reachable!; fi
221 [...]
222
223 uboot> run firmware_upg
224 Ethernet mode (duplex/speed): 1/100 Mbps
225 Using eth0 device
226
227 Ping OK, host 192.168.1.2 is alive!
228
229
230 TFTP from IP: 192.168.1.2
231       Our IP: 192.168.1.1
232     Filename: 'firmware.bin'
233 Load address: 0x80800000
234        Using: eth0
235
236      Loading: ########################################
237               ########################################
238               ########################################
239               ########################################
240               ########################################
241               ########################################
242               ########################################
243               ########################################
244               ########################################
245               ########################################
246               ########################################
247               ########################################
248               ########################################
249               ########################################
250               ########################################
251               ########################################
252               ########################################
253               ########################################
254               ########################################
255               #########
256
257 TFTP transfer complete!
258
259 Bytes transferred: 3932160 (0x3c0000)
260 Erase FLASH from 0x9F020000 to 0x9F3DFFFF in bank #1
261 Erasing: #######################################
262          #####################
263
264 Erased sectors: 60
265
266 Copying to FLASH...
267 Writing at address: 0x9F020000
268
269 Done!
270
271 OK!
272 uboot>
273 ```
274
275 ### Inne
276
277 Ponadto:
278
279 - Przyspieszony start
280 - Nieistotne informacje wyświetlane w konsoli podczas uruchamiania zostały usunięte
281 - Automatyczne rozpoznawanie zastosowanej kości FLASH na podstawie JEDEC ID
282 - MAC adres dla interfejsów sieciowych jest pobierany z FLASH, a nie ustawiany na sztywno
283 - Ładowanie firmware może być przerwane przy pomocy dowolnego klawisza
284 - Lepszy sterownik konsoli szeregowej UART ze wsparciem dla wielu prędkości
285 - Wciśnij i przytrzymaj przycisk aby uruchomić:
286   - Werwer web (min. 3 sekundy)
287   - Konsolę szeregową U-Boot (min. 5 sekundy)
288   - Konsolę sieciową U-Boot (min. 7 sekundy)
289 - Dodatkowe komendy (w odniesieniu do wersji producenta; dostępność zależy od modelu):
290   -  defenv
291   -  httpd
292   -  itest
293   -  loadb
294   -  loady
295   -  printmac
296   -  setmac
297   -  printmodel
298   -  printpin
299   -  startnc
300   -  startsc
301   -  ping
302   -  dhcp
303   -  sntp
304   -  iminfo
305 - Możliwości overclockingu i underclockingu (aktualnie tylko w modelach z SoC AR9331)
306
307 ### Automatycznie rozpoznawane kości FLASH
308
309 Automatyczna detekcja typu zastosowanej kości FLASH może być bardzo przydatna jeżeli wymieniłeś FLASH w swoim routerze. Nie musisz dokonywać zmian w oficjalnych źródłach i kompilować ich żeby mieć dostęp do całej zawartości FLASH z poziomu konsoli U-Boot.
310
311 Jeżeli wykorzystasz kość, której nie ma na poniższej liście, moja wersja U-Boot spróbuje odczytać jej parametry wykorzystując standard **Serial Flash Discoverable Parameter** (**SFDP**, więcej informacji: https://www.jedec.org/standards-documents/docs/jesd216b). Jeżeli Twoja kość nie wspiera SFDP, ta modyfikacja będzie traktować ją tak jakby miała rozmiar zgodny z rozmiarem domyślnie zastosowanej kości w danym modelu. W większości urządzeń nie będziesz też miał możliwości aktualizacji obrazu danych kalibracyjnych układu radiowego (ART).
312
313 Pełna lista obsługiwanych kości FLASH:
314
315 **4 MiB**:
316
317 - Spansion S25FL032P (4 MiB, JEDEC ID: 01 0215)*
318 - Atmel AT25DF321 (4 MiB, JEDEC ID: 1F 4700)
319 - EON EN25Q32 (4 MiB, JEDEC ID: 1C 3016)*
320 - EON EN25F32 (4 MiB, JEDEC ID: 1C 3116)*
321 - Micron M25P32 (4 MiB, JEDEC ID: 20 2016)
322 - Windbond W25Q32 (4 MiB, JEDEC ID: EF 4016)
323 - Macronix MX25L320 (4 MiB, JEDEC ID: C2 2016)
324
325 **8 MiB**:
326
327 - Spansion S25FL064P (8 MiB, JEDEC ID: 01 0216)
328 - Atmel AT25DF641 (8 MiB, JEDEC ID: 1F 4800)
329 - EON EN25Q64 (8 MiB, JEDEC ID: 1C 3017)*
330 - Micron M25P64 (8 MiB, JEDEC ID: 20 2017)
331 - Windbond W25Q64 (8 MiB, JEDEC ID: EF 4017)*
332 - Macronix MX25L64 (8 MiB, JEDEC ID: C2 2017, C2 2617)
333
334 **16 MiB**:
335
336 - Winbond W25Q128 (16 MB, JEDEC ID: EF 4018)*
337 - Winbond W25Q128FW (16 MB, JEDEC ID: EF 6018, 1,8 V)*
338 - Macronix MX25L128 (16 MB, JEDEC ID: C2 2018, C2 2618)
339 - Spansion S25FL127S (16 MB, JEDEC ID: 01 2018)*
340 - Micron N25Q128 (16 MB, JEDEC ID: 20 BA18)
341
342 (*) przetestowane
343
344 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ą. Ewentualnie, możesz samemu dokonać odpowiednich zmian w kodzie i przesłać mi gotową łatę lub zgłosić pull request.
345
346 Jak to zainstalować?
347 --------------------
348
349 ### Uwagi, kopie zapasowe
350
351 **Robisz to wyłącznie na własną odpowiedzialność!**   
352 **Jeżeli popełnisz jakiś błąd lub coś pójdzie nie tak w trakcie aktualizacji, w najgorszym przypadku, Twój router nie uruchomi się już ponownie!**
353
354 Wykonywanie kopii zapasowych jest dobrą praktyką, dlatego zalecam Ci skopiowanie zawartości oryginalnego obrazu/partycji U-Boot (szczególnie w przypadku routerów TP-Link), **zanim** wykonasz jakiekolwiek zmiany. Przykładowo, wykorzystując OpenWrt (na przykładzie TP-Link TL-WR703N z kością FLASH 16 MiB):
355
356 ```
357 cat /proc/mtd
358 ```
359
360 Komenda ta wyświetli listę wszystkich partycji **MTD** (Memory Technology Device):
361
362 ```
363 dev:    size   erasesize  name
364 mtd0: 00020000 00010000 "u-boot"
365 mtd1: 000eeb70 00010000 "kernel"
366 mtd2: 00ee1490 00010000 "rootfs"
367 mtd3: 00c60000 00010000 "rootfs_data"
368 mtd4: 00010000 00010000 "art"
369 mtd5: 00fd0000 00010000 "firmware"
370 ```
371
372 Jak widać powyżej, partycja o nazwie `u-boot` ma rozmiar **0x20000** (128 KiB), z kolei publikowane przeze mnie gotowe obrazy dla tego modelu mają mniejszy rozmiar: **0x1EC00** (123 KiB). Jest to bardzo istotna różnica i powinieneś o niej pamiętać, jeżeli do zmiany U-Boot zamierzasz wykorzystać narzędzie `mtd` lub konsolę szeregową i wiersz poleceń U-Boot.
373
374 W celu skopiowania zawartości partycji `u-boot` do pamięci RAM, wykonaj:
375
376 ```
377 cat /dev/mtd0 > /tmp/uboot_backup.bin
378 ```
379
380 Następnie połącz się z routerem przy pomocy `protokołu SCP` i pobierz `/tmp` na dysk lokalny plik `uboot_backup.bin`.
381
382 ### Przy pomocy programatora FLASH
383
384 Jeżeli dysponujesz programatorem kości FLASH (wszystkie wspierane urządzenia posiadają kości typu **SPI NOR FLASH**), najpewniej wiesz jak z niego korzystać. Pobierz archiwum zawierające gotowe obrazy binarne lub samodzielnie skompiluj kod źródłowy, wybierz odpowiedni plik dla swojego urządzenia i wgraj go na sam początek kości (ofset `0x00000`). Musisz pamiętać jedynie o skasowaniu bloku(ów) przed wgraniem obrazu - jeżeli wykorzystujesz gotowe oprogramowanie dla programatora, w trybie automatycznym, prawdopodobnie odpowiedni obszar zostanie automatycznie wykasowany przed wgraniem wskazanego obrazu.
385
386 Wszystkie publikowane przeze mnie gotowe obrazy binarne są dopełnione wartościami 0xFF i od zmiany "**![Extend maximum U-Boot image size up to 123 KB](https://github.com/pepe2k/u-boot_mod/commit/7829f50c0e92024fde613cb01e65cbdeae1f126b)**", dla większości wspieranych urządzeń, **nie są już wielokrotnością rozmiaru pojedynczego bloku 64 KiB**. Przykładowo, **TP-Link** w większości swoich nowych urządzeń wykorzystuje tylko pierwszy **64 KiB** blok do przechowywania skompresowanego obrazu U-Boot. W kolejnym 64 KiB bloku umieszcza takie informacje jak adres MAC, numer i wersję modelu oraz czasami pin WPS. Ta modyfikacja wykorzystuje oba sektory na obraz U-Boot oraz dodatkowe dane, w tym niewielki blok na zapisywalne zmienne środowiskowe.
387
388 Poniższy fragment początkowy mapy pamięci FLASH dla modelu TP-Link TL-MR3020 pokazuje różnice pomiędzy wersją producenta i modyfikacją.
389
390 ![](http://www.tech-blog.pl/wordpress/wp-content/uploads/2016/03/mr3020_u-boot-modification_flash-map_comparison.png)
391
392 Z drugiej strony, obraz U-Boot w module **8devices Carambola 2** może mieć maksymalnie **256 KiB** (4 bloki po 64 KiB każdy), ale obraz nie jest skompresowany. Zaraz za nim, w kolejnym 64 KiB bloku, znajdują się zmienne środowiskowe - partycja ta w OpenWrt, w tym konkretnym przypadku, nosi nazwę `u-boot-env`:
393
394 ```
395 dev:    size   erasesize  name
396 mtd0: 00040000 00010000 "u-boot"
397 mtd1: 00010000 00010000 "u-boot-env"
398 mtd2: 00f90000 00010000 "firmware"
399 mtd3: 00e80000 00010000 "rootfs"
400 mtd4: 00cc0000 00010000 "rootfs_data"
401 mtd5: 00010000 00010000 "nvram"
402 mtd6: 00010000 00010000 "art"
403 ```
404
405 ### Przy pomocy UART, konsoli U-Boot i serwera TFTP
406
407 **UWAGA! Ta metoda jest zdecydowanie niezalecana!**
408
409 Jest to prawdopodobnie najczęściej wykorzystywana metoda do wgrania firmware w przypadku problemów z uruchomieniem wersji znajdującej się w urządzeniu lub po nieudanej aktualizacji. Istotną wadą tego podejścia jest potrzeba rozebrania routera i połączenia się z nim przy pomocy interfejsu szeregowego UART (w przypadku Carambola 2 w wersji z płytką developerską sprawa jest ułatwiona, ponieważ adapter USB-UART bazujący na FTDI FT232RQ znajduje się już na PCB).
410
411 #### Ważna informacja!
412
413 Wszystkie wspierane urządzenia posiadają sprzętowy interfejs UART, zintegrowany wewnątrz układu SoC, pracujący w zakresie napięcia około 3,3 V (w istocie, wyprowadzenia GPIO mogą pracować przy takim napięciu, ale w rzeczywistości, zgodnie z dokumentacją części układów zastosowanych we wspieranych modelach, porty GPIO zasilane są z wewnętrznego stabilizatora o napięciu wyjściowym 2,62 V)!
414
415 **Nie podłączaj** bezpośrednio żadnego interfejsu RS232 pracującego przy napięciu +/- 12 V lub innego adaptera, bez odpowiedniego konwertera poziomów napięć, ponieważ może to doprowadzić do trwałego uszkodzenia Twojego routera. Najlepiej będzie jeżeli wykorzystasz dowolny adapter USB-UART, który posiada zintegrowany konwerter 3,3 V. Pamiętaj również, że w przypadku korzystania z takiego adaptera powinieneś **podłączyć wyłącznie sygnały RX, TX i GND**. **NIGDY** nie łącz razem sygnału zasilania (VCC) z routera i adaptera, chyba że wiesz co robisz! Połączenie tych sygnałów w najgorszym wypadku może spowodować uszkodzenie adaptera, a w najgorszym - również routera! Wykorzystując adapter USB-UART powinieneś zasilić go z gniazda USB w komputerze, a router z oryginalnego zasilacza sieciowego (lub z gniazda USB jeżeli urządzenie jest zasilane w taki sposób).
416
417 Od dłuższego czasu i bez żadnych problemów używam bardzo prostego i wyjątkowo taniego (w granicach 1-2 USD) adaptera bazującego na układzie **CP2102**. Po więcej informacji o interfejsie UART w routerach możesz sięgnąć do artykułu [Serial Console](http://wiki.openwrt.org/doc/hardware/port.serial) w OpenWrt Wiki.
418
419 #### Instrukcja krok po kroku
420
421 1. Zainstaluj i skonfiguruj na swoim PC dowolny **serwer TFTP** (dla systemów z rodziny Windows sugeruję [TFTP32](http://tftpd32.jounin.net)).
422
423 2. Ustaw stały adres IP na swoim PC (w poniższej instrukcji wykorzystamy **192.168.1.2** dla PC i **192.168.1.1** dla routera) i połącz go z routerem przy pomocy kabla sieciowego RJ45 (powinieneś wykorzystać w routerze jedno z gniazd LAN, ale WAN również powinien działać).
424
425 3. Podłącz do PC i skonfiguruj adapter USB-UART oraz uruchom program do komunikacji z nim, np. [PuTTY](http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html).   
426 Skonfiguruj program do używania takich ustawień:
427   * Baud rate: 115200
428   * Data bits: 8
429   * Parity control: none
430   * Stop bits: 1
431   * Handshaking: none
432 4. Uruchom router, zaczekaj na wyświetlenie się jednego z poniższych komunikatów i przerwij proces ładowania firmware:
433
434   `Autobooting in 1 seconds` (głównie routery **TP-Link**, w tym momencie powinieneś wpisać `tpl`)   
435   `Hit ESC key to stop autoboot:  1` (**8devices Carambola 2**, wciśnij klawisz `ESC`)   
436   `Hit any key to stop autoboot:  1` (**D-Link DIR-505**, wciśnij dowolny klawisz)
437
438 5. Ustaw zmienne środowiskowe `ipaddr` i `serverip`, tak jak poniżej:
439
440   ```
441   hornet> setenv ipaddr 192.168.1.1
442   hornet> setenv serverip 192.168.1.2
443   ```
444 6. Sprawdź czy zmiany zostały wprowadzone:
445
446   ```
447   hornet> printenv ipaddr
448   ipaddr=192.168.1.1
449   hornet> printenv serverip
450   serverip=192.168.1.2
451   ```
452
453 7. Ze względu na różnice w mapie pamięci i rozmiarze obrazu oryginalnej i zmodyfikowanej wersji U-Boot, musisz najpierw wykonać kopię zapasową partycji z oryginalną wersją, w pamięci RAM. **Pominięcie lub nieprawidłowe wykonanie tego kroku prawdopodobnie zakończy się uszkodzeniem Twojego urządzenia!**
454
455   Ten krok różni się w zależności od modelu, dlatego powinieneś zwrócić szczególną uwagę na rozmiar obrazu zmodyfikowanej wersji, **zaokrąglić go w górę, do najbliższej wielokrotności 64 KiB** i używać tej wartości we wszystkich kolejnych krokach.
456
457   Przykładowo, jeżeli obraz modyfikacji ma **123 KiB** (**0x1EC00**) powinieneś najpierw wykonać kopię zapasową **128 KiB** (**0x20000**) w pamięci RAM, pod tym samym adresem, do którego później zostanie pobrany ten obraz:
458
459   ```
460   hornet> cp.b 0x9F000000 0x80800000 0x20000
461   ```
462
463   Wykorzystanie tego samego adresu w pamięci RAM spowoduje "sklejenie" obu obrazów i zachowanie dodatkowych, oryginalnych danych, takich jak adres MAC, numer modelu i PIN.
464
465 8. Pobierz z serwera TFTP i umieść w pamięci RAM urządzenia właściwy dla swojego modelu obraz U-Boot, wykorzystując polecenie `tftpboot` (na przykładzie **TP-Link TL-MR3020**):
466
467   ```
468   hornet> tftpboot 0x80800000 uboot_for_tp-link_tl-mr3020.bin
469   eth1 link down
470   Using eth0 device
471   TFTP from server 192.168.1.2; our IP address is 192.168.1.1
472   Filename 'uboot_for_tp-link_tl-mr3020.bin'.
473   Load address: 0x80800000
474   Loading: #########################
475   done
476   Bytes transferred = 125952 (1ec00 hex)
477
478   hornet>
479   ```
480
481 9. Kolejny krok jest bardzo ryzykowny! Wykonując następne polecenia, najpierw skasujesz oryginalny obraz U-Boot z pamięci FLASH, a następnie skopiujesz w to miejsce nowy obraz, z pamięci RAM. Jeżeli w trakcie tego procesu coś pójdzie nie tak (na przykład dojdzie do awarii zasilania), Twój router najprawdopodobniej już się nie uruchomi ponownie!
482
483   Powinieneś też zwrócić uwagę na rozmiar i wykorzystać wartość, którą obliczyłeś w kroku 7. We wszystkich przypadkach, adres początkowy pamięci FLASH i RAM to odpowiednio: **0x9F000000** i **0x80000000**. Jak mogłeś zauważyć, w poprzednim kroku, do zapisania pobranego przez sieć obrazu, nie wykorzystałem początkowego adresu pamięci RAM i również nie powinieneś tego robić.
484
485   Nie popełnij żadnych błędów w rozmiarach i adresach (ofsetach), w kolejnych krokach!
486
487 10. Skasuj odpowiedni obszar w pamięci FLASH (to polecenie usunie oryginalny obraz U-Boot!):
488
489   ```
490   hornet> erase 0x9F000000 +0x20000
491
492   First 0x0 last 0x1 sector size 0x10000
493   Erased 2 sectors
494   hornet>
495   ```
496
497 11. W tej chwili Twój router nie posiada żadnego bootloadera, dlatego skopiuj do FLASH z pamięci RAM pobrany wcześniej, nowy obraz:
498
499   ```
500   hornet> cp.b 0x80800000 0x9F000000 0x20000
501
502   Copy to Flash... write addr: 9f000000
503   done
504   ```
505
506 12. Jeżeli chcesz, możesz wyświetlić w konsoli U-Boot zawartość pamięci FLASH i porównać ją z obrazem na komputerze. W tym celu należy skorzystać z komendy `md`, która spowoduje wyświetlenie 256 bajtów danych w postaci szesnastkowej i tekstowej, począwszy od podanego w argumencie adresu. Kolejne wywołanie tego samego polecenia, tym razem bez parametru, spowoduje wyświetlenie kolejnej porcji danych.
507
508   ```
509   hornet> md 0x9F000000
510
511   9f000000: 100000ff 00000000 100000fd 00000000    ................
512   9f000010: 10000222 00000000 10000220 00000000    ..."....... ....
513   9f000020: 1000021e 00000000 1000021c 00000000    ................
514   9f000030: 1000021a 00000000 10000218 00000000    ................
515   9f000040: 10000216 00000000 10000214 00000000    ................
516   9f000050: 10000212 00000000 10000210 00000000    ................
517   9f000060: 1000020e 00000000 1000020c 00000000    ................
518   9f000070: 1000020a 00000000 10000208 00000000    ................
519   9f000080: 10000206 00000000 10000204 00000000    ................
520   9f000090: 10000202 00000000 10000200 00000000    ................
521   9f0000a0: 100001fe 00000000 100001fc 00000000    ................
522   9f0000b0: 100001fa 00000000 100001f8 00000000    ................
523   9f0000c0: 100001f6 00000000 100001f4 00000000    ................
524   9f0000d0: 100001f2 00000000 100001f0 00000000    ................
525   9f0000e0: 100001ee 00000000 100001ec 00000000    ................
526   9f0000f0: 100001ea 00000000 100001e8 00000000    ................
527   ```
528
529 13. Jeżeli jesteś pewien, że wszystko przebiegło prawidłowo, możesz zrestartować urządzenie przy pomocy poniższego polecenia lub restartując zasilanie:
530
531   ```
532   hornet> reset
533   ```
534
535 ### Przy pomocy OpenWrt
536
537 **Ta metoda jest zalecana!**
538
539 Począwszy od oficjalnego wydania "**[2014-11-19](https://github.com/pepe2k/u-boot_mod/releases/tag/2014-11-19)**", wewnątrz archiwum znajdziesz przygotowane obrazy **OpenWrt** z odblokowaną możliwością zapisu na partycji `u-boot`, gotowym obrazem U-Boot oraz niewielkim, dedykowanym skryptem do prostej aktualizacji bootloadera. Jedyne, co należy zrobić to pobrać ostatnie oficjalne wydanie tej modyfikacji, wybrać i zainstalować odpowiedni obraz OpenWrt i wywołać skrypt poleceniem `u-boot-upgrade`:
540
541 ```
542 root@OpenWrt:/# u-boot-upgrade
543
544 =================================================================
545      DISCLAIMER: you are using this script at your own risk!
546
547      The author of U-Boot modification and this script takes
548      no responsibility for any of the results of using them.
549
550           Updating U-Boot is a very dangerous operation
551         and may damage your device! You have been warned!
552 =================================================================
553    Are you sure you want to continue (type 'yes' or 'no')? yes
554 =================================================================
555
556 [ ok ] Found U-Boot image file: uboot_for_tp-link_tl-mr3020.bin
557        Do you want to use this file (type 'yes' or 'no')? yes
558 [ ok ] MD5 checksum of new U-Boot image file is correct
559 [ ok ] Backup of /dev/mtd0 successfully created
560        Do you want to store backup in /etc/u-boot_mod/backup/ (recommended, type 'yes' or 'no')? no
561 [ ok ] New U-Boot image successfully combined with backup file
562 [info] New U-Boot image is ready to be written into FLASH
563        Are you sure you want to continue (type 'yes' or 'no')? yes
564 [ ok ] New U-Boot image successfully written info FLASH
565 [ ok ] MD5 checksum of mtd0 and new U-Boot image are equal
566 [info] Done!
567 ```
568
569 ### Przy pomocy DD-WRT
570
571 **UWAGA! Ta metoda jest niezalecana!**
572
573 1. Zaloguj się do routera przy pomocy SSH lub telnetu i sprawdź, która z partycji mtd jest pierwsza. W DD-WRT najczęściej będzie to `RedBoot`:
574
575   ```
576   root@DD-WRT:~# cat /proc/mtd
577   dev:    size   erasesize  name
578   mtd0: 00020000 00010000 "RedBoot"
579   mtd1: 003c0000 00010000 "linux"
580   mtd2: 002c0000 00010000 "rootfs"
581   mtd3: 00010000 00010000 "ddwrt"
582   mtd4: 00010000 00010000 "nvram"
583   mtd5: 00010000 00010000 "board_config"
584   mtd6: 00400000 00010000 "fullflash"
585   mtd7: 00020000 00010000 "fullboot"
586   ```
587
588   W przypadku **TP-Link TL-MR3020**, partycja `RedBoot` zawiera obraz U-Boot oraz dodatkowe dane, takie jak adres MAC, numer modelu oraz PIN.
589
590   **Uwaga!** Jeżeli rozmiar pierwszej partycji jest mniejszy niż rozmiar obrazu zmodyfikowanej wersji U-Boot, nie kontynuuj!
591
592 2. Przy pomocy SCP lub innej metody skopiuj obraz U-Boot i odpowiedni plik z sumą MD5 do folderu `/tmp` na urządzeniu.
593
594   ```
595   root@DD-WRT:/tmp# ls -la
596   [...]
597   -rw-r--r--    1 root     root        125952 Nov  5  2015 uboot_for_tp-link_tl-mr3020.bin
598   -rw-r--r--    1 root     root            66 Nov  5  2015 uboot_for_tp-link_tl-mr3020.md5
599   [...]
600   ```
601
602 3. Sprawdź sumę kontrolną MD5 pliku z obrazem:
603
604   ```
605   root@DD-WRT:/tmp# md5sum uboot_for_tp-link_tl-mr3020.bin
606   aaae0f772ce007f7d1542b9233dd765b  uboot_for_tp-link_tl-mr3020.bin
607
608   root@DD-WRT:/tmp# cat uboot_for_tp-link_tl-mr3020.md5
609   aaae0f772ce007f7d1542b9233dd765b *uboot_for_tp-link_tl-mr3020.bin
610   ```
611
612 4. Utwórz kopię zapasową partycji `RedBoot` (`mtd0`):
613
614   ```
615   root@DD-WRT:/tmp# dd if=/dev/mtd0 of=uboot_factory.bin
616   256+0 records in
617   256+0 records out
618   ```
619
620 5. Przy pomocy SCP lub innej metody, skopiuj utworzoną kopię zapasową w jakieś bezpieczne miejsce (zdecydowanie zalecam zapisanie gdzieś tego pliku!).
621
622 6. Potrzebujesz utworzyć plik składający się z oryginalnego i zmodyfikowaneg obrazu, ale `dd` z DD-WRT prawdopodobnie nie obsługuje `conv=notrunc`, dlatego wykorzystamy inne podejście:
623
624   ```
625   root@DD-WRT:/tmp# dd if=uboot_factory.bin of=uboot_rest.bin bs=1 skip=$(wc -c < uboot_for_tp-link_tl-mr3020.bin)
626   5120+0 records in
627   5120+0 records out
628
629   root@DD-WRT:/tmp# cat uboot_for_tp-link_tl-mr3020.bin uboot_rest.bin > uboot_new.bin
630   ```
631
632 7. **Uwaga**: To jest punkt bez powrotu. Jeżeli podczas dotychczasowych kroków wystąpiły jakieś błędy lub problemy, wgraj kopię oryginalnej partycji z powrotem, przy pomocy polecenia:
633
634   ```
635   root@DD-WRT:/tmp# mtd write uboot_factory.bin "RedBoot"
636   Unlocking RedBoot ...
637   Writing from uboot_orig.bin to RedBoot ...
638   ```
639
640 8. W celu wgrania nowego obrazu, wykonaj poniższe polecenie:
641
642   ```
643   root@DD-WRT:/tmp# mtd write uboot_new.bin "RedBoot"
644   Unlocking RedBoot ...
645   Writing from uboot_new.bin to RedBoot ...
646   ```
647
648 9. Jeżeli jesteś pewien, że do tej pory wszystko przebiegło pomyślnie, możesz zrestartować urządzenie:
649
650   ```
651   root@DD-WRT:/tmp# reboot
652   ```
653
654 ### Jak korzystać z tej modyfikacji?
655
656 [TODO]
657
658 Jak samodzielnie skompilować kod?
659 ---------------------------------
660
661 Możesz wykorzystać jeden z dostępnych, bezpłatnych i gotowych narzędzi (tzw. toolchain):
662
663 - Zalecany i wykorzystywany do budowania tzw. migawek: [LEDE SDK for AR71xx MIPS (wersja rozwojowa)](https://downloads.lede-project.org/snapshots/targets/ar71xx/generic/lede-sdk-ar71xx-generic_gcc-5.4.0_musl-1.1.15.Linux-x86_64.tar.bz2),
664 - [OpenWrt SDK for AR71xx MIPS (wydanie Chaos Calmer)](https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/OpenWrt-SDK-15.05.1-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2),
665 - [OpenWrt Toolchain for AR71xx MIPS (wersja rozwojowa)](https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/OpenWrt-Toolchain-ar71xx-generic_gcc-5.3.0_musl-1.1.15.Linux-x86_64.tar.bz2),
666 - [ELDK (Embedded Linux Development Kit)](http://bit.ly/2djaTMn),
667 - lub inne...
668
669 Do kompilacji korzystam z **OpenWrt Toolchain for AR71xx MIPS**, na maszynie wirtualnej z zainstalowanym **Ubuntu 12.04 LTS** (32-bit). Wszystkie publikowane przeze mnie obrazy budowane są na tej konfiguracji.
670
671 Wszystko co musisz zrobić, po wybraniu zestawu narzędzi, to dostosowanie pliku [Makefile](Makefile) do własnej konfiguracji (czyli zmiana lub usunięcie `export MAKECMD` i ewentualnie dodanie `export PATH`). Przykładowo, w celu zbudowania obrazów przy pomocy OpenWrt Toolchain, zamiast Sourcery CodeBench Lite, pobierz odpowiednie archiwum i rozpakuj jego zawartość do folderu `toolchain`, w głównym katalogu ze źródłami, a następnie zmień początek pliku [Makefile](Makefile), jak poniżej:
672
673 ```
674 export BUILD_TOPDIR=$(PWD)
675 export STAGING_DIR=$(BUILD_TOPDIR)/tmp
676
677 export MAKECMD=make --silent ARCH=mips CROSS_COMPILE=mips-openwrt-linux-uclibc-
678 export PATH:=$(BUILD_TOPDIR)/toolchain/bin/:$(PATH)
679 ```
680
681 W celu uruchomienia kompilacji, w głównym katalogu ze źródłami wydaj polecenie `make model`, na przykład:
682
683 ```
684 make tplink_wr703n
685 ```
686
687 Powyższe polecenie rozpocznie kompilację obrazu U-Boot dla modelu **TP-Link TL-WR703N**.
688
689 FAQ
690 ---
691
692 #### 1. Moje urządzenie nie jest wspierane, ale posiada taki sam hardware jak jedno z tych na liście, mogę użyć tej modyfikacji?
693
694 *To może się źle skończyć! Oczywiście, wiele dostępnych na rynku routerów wykorzystuje praktycznie te same platformy sprzętowe - na przykład, TP-Link posiada w ofercie kilka mobilnych modeli z wbudowaną baterią: TL-MR10U, TL-MR11U (odpowiednik w Europie to TL-MR3040) TL-MR12U and TL-MR13U. Wszystkie wymienione urządzenia posiadają ten sam sprzęt: układ SoC Atheros AR9331 z 32 MiB pamięci RAM i 4 MiB pamięci SPI NOR FLASH. Ale diabeł jak zwykle tkwi w szczegółach, takich jak numery GPIO wykorzystanych do przycisków, diod LED, załączania zasilania w gnieździe USB itd., co może spowodować pewne problemy.*
695
696 *Możesz spróbować wgrać jeden z gotowych obrazów, ale pamiętaj że robisz to wyłącznie na własną odpowiedzialność!*
697
698 #### 2. Chciałbym podkręcić CPU w moim routerze, jak tego dokonać?
699
700 *W chwili obecnej, taka możliwość istnieje, ale wyłącznie dla modeli z układem Atheros AR9331 (powinieneś zapoznać się z plikiem [ap121.h](u-boot/include/configs/ap121.h), który zawiera wszelkie informacje dotyczące konfiguracji rejestrów PLL i kilka gotowych, niestandardowych ustawień zegarów dla CPU, RAM i magistrali AHB). Co więcej, wersję z podkręconymi (lub "skręconymi") zegarami będziesz musiał skompilować samodzielnie, ponieważ nie publikuję gotowych obrazów, z innymi niż domyślne, wartościami zegarów.*
701
702 *I ponownie, pamiętaj że robisz to wyłącznie na własną odpowiedzialność!*
703
704 #### 3. Czy testujesz wszystkie publikowane obrazy?
705
706 *Nie, ponieważ nie dysponuję wszystkimi wspieranymi modelami routerów/urządzeń. Testuję jedynie obrazy na wszystkich wspieranych typach układów SoC.*
707
708 #### 4. Chciałbym dodać wsparcie dla modelu X.
709
710 *Możesz to zrobić samemu, a potem przesłać mi gotową łatę lub zgłosić pull request. Jeżeli nie chcesz lub nie wiesz jak dodać wsparcie dla nowego modelu, skontaktuj się ze mną bezpośrednio, może pomogę.*
711
712 #### 5. Mój router nie uruchomił się ponownie po zmianie U-Boot!
713
714 *Ostrzegałem... bootloader, w tym przypadku U-Boot, to w praktyce najistotniejszy kawałek oprogramowania w Twoim urządzeniu. Jest on odpowiedzialny za inicjalizację sprzętu i załadowanie systemu operacyjnego (zazwyczaj jądra Linux). Dlatego, jeżeli podczas zmiany obrazu coś poszło źle, Twoje urządzenie nie uruchomi się ponownie i jedynym sposobem na jego naprawę jest zdemontowanie (wylutowanie) kości FLASH, zaprogramowanie jej poprawnym obrazem i ponowny montaż.*
715
716 Licencja, przestarzałe źródła itd.
717 ----------------------------------
718
719 Projekt **[U-Boot](http://www.denx.de/wiki/U-Boot/WebHome "U-Boot")** jest Wolnym Oprogramowaniem. Wszelkie informacje dotyczące licencji, pracujących nad nim osób itd., dostępne są folderze *u-boot* wraz z kodem źródłowym.
720
721 Powinieneś wiedzieć, że większość routerów, szczególnie tych z układami Atheros, używa bardzo starej wersji U-Boot (wersja 1.1.4 pochodzi z lat 2005/2006). Dlatego stwierdzenie, że *te źródła są zdecydowanie przestarzałe* nie jest błędne, ale dla mnie było łatwiej zmodyfikować je w tej postaci, niż przenosić zmiany wykonane przez programistów TP-Link/Atheros do aktualnej gałęzi projektu U-Boot. Co więcej, wprowadzając własne modyfikacje, usunąłem sporo niepotrzebnych elementów, fragmentów kodu i plików źródłowych, tak żeby kod był czytelniejszy dla osoby, która do tej pory nie miała do czynienia z tym projektem.
722
723 Podziękowania
724 -------------
725
726 - Dziękuję M-K O'Connell za przekazanie routera z QCA9563
727 - Dziękuję Krzysztofowi M. za przekazanie routera TL-WDR3600
728 - Dziękuję użytkownikowi *pupie* z forum OpenWrt za jego nieocenioną pomoc
729 - Dziękuję wszystkim darczyńcom i osobom wspierającym rozwój tej modyfikacji