Netgear WNR2200

В Netgear WNR2200 установлен процессор Atheros AR7241 и 64 мегабайта RAM. Размер флеша отличается в разных версиях: в продаваемой в России и Китае 16MiB SPI-NOR flash на микросхеме MX25L12845EMI-10G, в версии продаваемой в других странах 8 мегабайт флеша на SOIC8 микросхеме SPI flash.

Продаваемая в России версия в некоторых источниках называется WNR2200-100RUS, но на самом роутере написано просто WNR2200 в любом случае.

При сравнении наклеек на задней стороны роутера, было обнаружено, что они содержат одну и ту же информацию, FCC id и остальные цифровые коды идентичны, но расположены в разном порядке, кроме того, на версии 100RUS (16m) три наклейки, на которых: SECURITY PIN, SERIAL, MAC В то же время на роутере, на котором было 8M флеша, купленном в другой стране наклеек четыре: WiFi Network Name (SSID), Network Key (Password), SERIAL, MAC.

Неизвесно, насколько надёжен такой способ, поэтому для определения размера флеша лучше разобрать роутер и посмотреть или воспользоваться терминалом.

Чтобы разобрать роутер необходимо снять четыре резиновые ножки (они не на клею, а просто вставлены) и выкрутить четыре винтика, понадобится отвёртка Torx T8 (звёздочка 2 мм по минимальному размеру)

На плате есть UART в верхнем правом углу платы, если сетевые порты снизу, он помечен JP1 и над крайним правым (Vcc) пином белая точка. Распиновка слева направо: GND, Rx, Tx, Vcc.

Микросхема флеша находится рядом с кнопками WPS и WLS под EJTAG. Перед прошивкой роутера желательно убедиться, что вы выбрали образ правильно. В случае прошивки образа 8 мегабайт на роутер с 16 мегабайт флеша ничего страшного не произойдёт, но раздел ART с данными калибровки и MAC-адресом Wi-Fi будет недоступен.

В прошивке с завода есть сервис telnet, но для для его включения нужна специальная программа (подробнее здесь: https://openwrt.org/toh/netgear/telnet.console )

Гораздо проще воспользоваться UART. После этого, можно взять прошивку sysupgrade и залить её с помощью утилиты mtd, при этом будет пропущена верификация. Перед прошивкой убедитесь, что первые четыре байта: “2200”, сделать это можно командой head -c 4 openwrt.img

В прошивке для WNR2200 (factory для openwrt) имеется заголовок размером 128 байт, содержащий текст вроде этого и дополненый до 128 байт символами 0x00, и дополнительный байт в конце с контрольной суммой. Для создания такого образа используется утилита mkdniimg. Пример заголовка взятый у официальной прошивки:

device:wnr2200
version:V1.0.2.24
region:

Данный заголовок проверяется веб-интерфейсом роутера (важна первая строчка) и если он неправильный, то веб-интерфейс откажется принять прошивку. Контрольная сумма проверяется дальше, она вычисляется простым арифметическим суммированием всех байтов, включая заголовок по модулю 256 и должна быть 0xFF. Для того, чтобы роутер принял прошивку, в конец добавляется один байт, дополняющий сумму до нужного значения.

На данный момент, в стабильной версии OpenWRT нет поддержки версии 16 мегабайт, но образ от 8 мегабайтной версии будет работать, хотя половина флеша будет недоступна. В версиях до 19.07 включительно требуется выбрать архитектуру (target) ar71xx, порт на более современную ath79 в процессе. Чтобы собрать образ для 16 мегабайтной версии из исходников старой версии OpenWRT, можно просто отредактировать файл target/linux/ar71xx/image/legacy.mk заменив строку:

wnr2200_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,7808k(firmware),64k(art)ro

На

wnr2200_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,16000k(firmware),64k(art)ro

В архитектуре ath79 поддержка 16 мегабайтной версии должна быть изначально.

Прошивка sysupgrade не содержит заголовка из 128 байт и однобайтной контрольной суммы в конце, начинается с “2200” и годится для заливки на раздел mtd или обновления из уже установленной OpenWRT.

Для восстановления заводской прошивки на роутере с 16 мегабайт флеша требуется скачать соответствующую прошивку с сайта netgear.ru, помеченную как “(только Россия и Китай)”, на момент написания статьи последняя версия — 1.0.2.24. После этого требуется отрезать первые 128 байт с заголовком, и так же можно убрать один байт с конца с контрольной суммой. Сделать это можно такой командой:

tail -c +129 wnr2200-100-V1.0.2.24.img | head -c -1 > stripped.img

Полученный файл stripped.img требуется перенести на роутер тем или иным способом, например через флешку или по scp. Если он находится в /tmp, команда записи будет примерно такой:

mtd -r write /tmp/stripped.img firmware

После завершения этой команды роутер будет перезагружен (ключ -r). Перед прошивкой желательно убедиться, что файл прошивки начинается с байтов 32 32 30 30 (2200) и кончается байтами de ad c0 de

Так же, можно попробовать прошить эту же обрезанную прошивку через sysupgrade или веб-интерфейс OpenWRT.

Если роутер перестал загружаться, проще всего его восстановить через UART, для этого требуется разобрать корпус и подключить его как указано выше. Если всё подключено корректно вы должны увидеть примерно следующее:

U-Boot 1.1.4-dirty (May 18 2011 - 08:43:35)

WNR2200 (ar7241) U-boot dni13 V0.9.3
DRAM:  
sri
ar7240_ddr_initial_config(139): virian ddr1 init
#### TAP VALUE 1 = 0x2, 2 = 0x2 [0x0: 0x0]
64 MB
Top of RAM usable for U-Boot at: 84000000
Reserving 279k for U-Boot at: 83fb8000
Reserving 192k for malloc() at: 83f88000
Reserving 44 Bytes for Board Info at: 83f87fd4
Reserving 36 Bytes for Global Data at: 83f87fb0
Reserving 128k for boot params() at: 83f67fb0
Stack Pointer at: 83f67f98
Now running in RAM - U-Boot at: 83fb8000
id read 0xc22018
Finding MXIC Flash. ID c22018
flash size 16MB, sector count = 256
Flash: 16 MB
calData0:9fff1000:a55a
calData1:9fff1000:a55a
In:    serial
Out:   serial
Err:   serial
Net:   ag7240_enet_initialize...
Fetching MAC Address from 0x9fff0000
Fetching MAC Address from 0x9fff0006
Virian MDC CFG Value ==> 4
: cfg1 0xf cfg2 0x7014
eth0: 00:11:22:33:44:55
eth0 up
Virian MDC CFG Value ==> 4
: cfg1 0xf cfg2 0x7214
eth1: 00:11:22:33:44:54
ATHRS26: resetting s26
ATHRS26: s26 reset done
eth1 up
eth0, eth1
Trying eth1
dup 1 speed 1000

 Client starts...[Listening] for ADVERTISE...TTT
Retry count exceeded; boot the image as usual

 nmrp server is stopped or failed !
Hit any key to stop autoboot:  0 
   Verifying Checksum ... OK
### SQUASHFS loading 'image/uImage' to 0x80800000
### SQUASHFS load complete: 902346 bytes loaded to 0x80800000
## Booting image at 80800000 ...
   Image Name:   Linux Kernel Image
   Created:      2012-09-06   7:35:06 UTC
   Image Type:   MIPS Linux Kernel Image (lzma compressed)
   Data Size:    902282 Bytes = 881.1 kB
   Load Address: 80002000
   Entry Point:  80294000
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK
No initrd
## Transferring control to Linux (at address 80294000) ...
## Giving linux memsize in bytes, 67108864

Starting kernel ...

При этом вам даётся несколько секунд чтобы нажать любую клавишу на надписи “Hit any key to stop autoboot”. Если это сделать вы попадаете в интерфейс U-boot в котором доступны следующие команды:

ar7240> help    
autoscr - run script from memory
?       - alias for 'help'
base    - print or set address offset
bdinfo  - print Board Info structure
boot    - boot default, i.e., run 'bootcmd'
bootd   - boot default, i.e., run 'bootcmd'
bootelf - Boot from an ELF image in memory
bootm   - boot application image from memory
bootp   - boot image via network using BootP/TFTP protocol
bootvx  - Boot vxWorks from an ELF image
cmp     - memory compare
coninfo - print console devices and information
cp      - memory copy
crc32   - checksum calculation
fls    - Set to change DDR settings on reboot
dhcp    - invoke DHCP client to obtain IP/boot params
echo    - echo args to console
erase   - erase FLASH memory
ethreg    - S26 PHY Reg rd/wr  utility
exit    - exit script
flinfo  - print FLASH memory information
fls    - Set to change Flash size on reboot
fsinfo  - print information about filesystems
fsload  - load binary file from a filesystem image
go      - start application at address 'addr'
help    - print online help
iminfo  - print header information for application image
imls    - list all images found in flash
itest   - return true/false on integer compare
loadb   - load binary file over serial line (kermit mode)
loads   - load S-Record file over serial line
loady   - load binary file over serial line (ymodem mode)
loop    - infinite loop on address range
ls      - list files in a directory (default /)
macset - Set ethernet MAC address
macshow - Show ethernet MAC addresses
md      - memory display
mii     - MII utility commands
mm      - memory modify (auto-incrementing)
mtest   - simple RAM test
mw      - memory write (fill)
nfs     - boot image via network using NFS protocol
nm      - memory modify (constant address)
pci     - list and access PCI Configuration Space
ping    - send ICMP ECHO_REQUEST to network host
pll    - Set to change CPU/AHB/DDR speeds
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
rnset   - set region number
rnshow  - Show Region Number on Board
run     - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv  - set environment variables
sleep   - delay execution for some time
snset   - set serial number
test    - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
version - print monitor version
wmacset - Set wlan MAC address
wpspinset - set wpspin number

С помощью этих команд можно загрузить образ прошивки по сети или UART и прошить его в флеш или сразу загрузить (вариант прошивки openwrt...initramfs-kernel.bin)

Если же нет возможности применить UART, то в самом начале загрузки видна надпись:

nmrp server is stopped or failed !

Из чего следует, что при отсутствии доступа к UART можно восстановить прошивку на стадии начальной загрузки по протоколу NMRP.

Так же существует способ восстановления прошивки роутера по tftp. На русской версии роутера работает он довольно неустойчиво.

Для того, чтобы ввести роутер в режим восстановления по TFTP, требуется включить роутер, подключенный к компьютеру по LAN1 (возможно работают и другие интерфейсы) с зажатой кнопкой (например WPS), или многократно нажимать кнопку через несколько секунд после включения, при этом когда роутер входит в этот режим, светодиод питания гаснет и слегка помаргивает. Если в течение 10-15 секунд после включения этого не произошло, роутер следует перезагрузить и попробовать снова.

На UART-консоли при этом появляется сообщение:

The Router is in TFTP Server Firmware Recovery mode NOW!
Listening on Port : 69, IP Address: 192.168.1.1...

После чего можно отправить файл прошивки с помощью tftp клиента (для openwrt нужен образ *-factory.img) и он будет залит.

Конкретный алгоритм действий требует уточнения.

Для WNR2200 и других подобных роутеров существует версия U-Boot, собираемая из исходников: https://github.com/realmicu/uboot-wnrmod2k Она может пригодиться при замене микросхемы флеш памяти на другой объём или старый загрузчик был перезаписан. Обновление загрузчика является опасной процедурой и если её запороть, то придётся прошивать микросхему внешним программатором.

1. Прошиваем wnr2200-webflash.bin с сайта dd-wrt через интерфейс оригинальной прошивки.

2. Настраиваем подключение Internet, либо создаем локальный http/ftp сервер.

3. Подключаемся telnet на роутер либо через http в диагностике выполняем команды:

 wget -c -O /tmp/openwrt.bin http://downloads.openwrt.org/.../openwrt-version-target-generic-wnr2200-squashfs-sysupgrade.bin
 mtd -r write /tmp/openwrt.bin linux
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2024/02/11 21:58
  • by 127.0.0.1