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.
Восстановление заводской прошивки из 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