понедельник, 29 ноября 2010 г.

Прошивка и восстановление роутеров TP-LINK (TL-WR741ND, TL-WR841ND, TL-WR1043ND, TL-MR3220 и т.п.) через Serial Console + LAN

Дорогие друзья!
Предлагаю Вашему вниманию подробную инструкции по прошивке замечательных, а главное недорогих девайсов фирмы TP-LINK.
Модели:
TL-WR( 741ND, 743ND; 841ND, 843ND; 941ND, 943ND )
TL-WA701ND
TL-WR1043ND;
TL-MR3220;
и т.п.
Инструкция полностью работоспособная!  Проверялась неоднократно.

Содержание:
1. Подготовка
2. Распайка
3. Процесс прошивки
4. FAQ
5. Дополнительные материалы ( прочитать перед прошивкой )
    1. Прошивка напрямую флешки ( M25P64-VMF6P )
    2. Установка пакета ip в TP-Link WR-741ND.
    3. Проблемы с родной прошивкой (связанные с ее большим размером)
6. Полезные ссылки
    1. Сборка кабеля под RS-232C.


1. Подготовка

Для прошивки нам понадобится следующее:

1. Скачать последнюю стабильную прошивку  OpenWRT или DD-Wrt (либо любую другую). Далее в статье я буду перепрошивать на примере open-wrt и устройства TP-Link WR741ND.
Скачайте прошивку соответственно вашему устройству.
OpenWRT:
openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory.bin с
http://downloads.openwrt.org/backfire/10.03.1-rc6/ar71xx/
DD-Wrt:
factory-to-ddwrt.bin
http://dd-wrt.com/site/support/router-database (выбрать в поле поиска TP-Link WR741ND )

2. скачать программу Putty (в маем случае release 0.60) качестве терминала выступала программа putty, конектились к порту COM4 на скорости 115200.

3. Tftp-сервер я использовал:
Для Windows:
Tftpd32 версии tftpd32 standard edition (installer) (545 kB)
Для Linux:
Демон tftpd

4. Кабеля.
Последовательность:   Компьютер-> com-to-usb -> NULL -> Serial -> TP-LINK

a)Кабель usb-to-com фирмы Sweex CD005 (чипсет PL232, драйвер CD005) подключается через переходниик NULL. Этот кабель нужен в том случае если в вашем компьютере или ноутбуке нат ком порта. Также устройство корректно прошивается чере кабель на микросхеме CP2102. А вот с микросхемой PL2303HX могут возникнуть проблемы с отображением символов.
usb-to-com Sweex CD005

b) сам переходник NULL

c) Serial. В нашем случае это com-кабель (собранному на схеме для преобразования уровней) который впаивается в плату устройства как показано на рисунке 1. Можите сами собрать кабель по схеме. Если у вас есть com-порт можите подключить только этот кабель без usb-to-com.
 Serial cabel



2. Распайка

TL-WR741ND 
Ver. 1.х
Вся серия первой версии  TL-WR741ND v. 1.1-1.8. Распайка показана на рисунке. Напряжение должно быть 3.3 V

 ver. 1.1-1.8


Ver 2.0 
Во второй версии устройства (TL-WR741ND v.2.0) припаиваться необходимо по следующей схеме:
Tx - TP 4
Rx - TP 5
Gnd - земля в любом месте.
2.5V - на контактной площадке рядом с процессором, к ней идет дорожка от последней ножки на процессора. если смотреть на плату то правый верхний угол. Проверить можно тестером, замерив напряжением между землей и и контактной площадкой, напряжение должно быть равно 2.5 V. Но ни как не 3.3 V ! как это было в серии версии 1.х
На чипсете AR7240  ножки соответствуют 86→Rx и 87→Tx.
http://code.google.com/p/ezbox/wiki/AtherosAR7240


Крайний верхний угол процессора (2.5 V)


TL-WR841ND
Ver. 7.2


TL-WR941ND
ver. 5.1




TL-WR1043ND



TL-MR3220


TL-MR3420




3. Процесс прошивки

Для Windows:
Запускаем putty и выбираем  Conection type 'Serial', редактируем Serial line в соответсвии с тем на каком порту у вас поднялся usb-to-com переходник в маем случае это COM3, посмотреть можно через диспетчер устройств строка- "Порты (COM или LPT)".


И выбираем скорость 115200, далее жмем "Open".
Откроется окно с терминалом на COM3 порту(у вас может быть другой). Далее вам нужно перезагрузить устройство и когда появиться строка Autobooting in 1 seconds  вам нужно успеть ввести слово tpl .

Для linux:
Устанавливаем демон tftpd:

Я использовал также putty
Из под рута делаем следующее:
root@hosting:/home/vitaliy# apt-get update
root@hosting:/home/vitaliy# apt-get install putty
root@hosting:/home/vitaliy# dmesg | grep tty
[622834.649300] usb 2-2: pl2303 converter now attached to ttyUSB1
root@hosting:/home/vitaliy# putty




Теперь перезагрузите устройство и вы увидете на экране загрузчик U-Boot если этого не произойдет и на экране будет пусто, тут возможны несколько причин (смотри FAQ), либо перепутан tx и rx при пайки, либо слетел сам загрузчик  U-Boot и тогда нужно будет шить флешку (см. пункт 4.Дополнительные материалы. Прошивка флешки M25P64-VMF6P) 


U-Boot 1.1.4 (Nov 16 2009 - 09:05:59)
AP91 (ar7240) U-boot
DRAM:
sri
#### TAP VALUE 1 = 9, 2 = a
32 MB
id read 0x100000ff
flash size 4194304, sector count = 64
Flash: 4 MB
Using default environment
In: serial
Out: serial
Err: serial
Net: ag7240_enet_initialize...
No valid address in Flash. Using fixed address
: cfg1 0xf cfg2 0x7014
eth0: 00:03:7f:09:0b:ad
eth0 up
No valid address in Flash. Using fixed address
: cfg1 0xf cfg2 0x7214
eth1: 00:03:7f:09:0b:ad
ATHRS26: resetting s26
ATHRS26: s26 reset done
eth1 up
eth0, eth1
Autobooting in 1 seconds <--- вот здесь и надо успеть набрать на клавиатуре tpl

Если вы успели, то увидите приглашение: ar7240> 



      Список используемых команд (краткий список команд):
1) printenv
2) tftpboot 0x80000000 openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory.bin
3) erase 0x9f020000 +0x3c0000
4) cp.b 0x80000000 0x9f020000 0x3c0000
5) bootm 0x9f020000

(ТРЕБУЕТ ПРОВЕРКИ) Для роутеров TL-WR1043ND возможны другие значения адрессов:
1) tftpboot 0x80000000 gargoyle_1.5.5-ar71xx-tl-wr1043nd-v1-squashfs-sysupgrade.bin
2) erase 0xbf020000 +0x680000
3) cp.b 0x80000000 0xbf020000 0x680000
4) bootm 0xbf020000

      Те же команды, но с результатами выполнения:

В консоли набираем printenv

ar7240> printenv
bootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 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=0x00:0xaa:0xbb:0xcc:0xdd:0xee
ipaddr=192.168.1.123 <----- IP вашего роутера
serverip=192.168.1.100 <----- IP tftp сервера откуда роутер будет качать прошивку
stdin=serial
stdout=serial
stderr=serial
ethact=eth0

Environment size: 359/65532 bytes

Теперь вам необходимо изменить IP вашего компьютера на 192.168.1.100
Подключите устройство ВНИМАНИЕ!!!  WAN-порт к вашей сетевой карте с адрессом 192.168.1.100
Найстройте в программе Tftpв32 Server interfaces '192.168.1.100'. Нажмите кнопку "Browse" и выберите папку с прошивкой (в виндовс 7, лучше на диске D: т.к. на С: нужен доступ администратора). Далее нажмите кнопку "Show Dir" выберите строку с прошивкой и нажмите кнопку "Copy", тем самым вы скопируете название прошивки в буфер обмена.
(название прошивки можно вставить из буфера обмена, в putty вставка из буфера осуществляется  нажатием правой кнопки мыши на экране сразу после мигающего курсора)

Затем возвращаемся к роутеру и вводим :


ar7240> tftpboot 0x80000000 openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory.bin   //загрузка прошивки которую скачали, по средствам tftp, в область памяти, адресс 0x80000000

eth1 link down
dup 1 speed 100
Using eth0 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.123
Filename 'openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory.bin'.
Load address: 0x80000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
######################################################
done
Bytes transferred = 3932160 (3c0000 hex)

ar7240> erase 0x9f020000 +0x3c0000   //очистка областей памяти с адрессами 0x9f020000 +0x3c0000


First 0x2 last 0x3d sector size 0x10000 61
Erased 60 sectors

ar7240> cp.b 0x80000000 0x9f020000 0x3c0000   //копирование прошивки (которую мы залили в 0x80000000, см выше) из области памяти 0x80000000 в области 0x9f020000 +0x3c0000 (которые мы предварительно очистили, см. выше)

Copy to Flash... write addr: 9f020000
done


ar7240> bootm 0x9f020000   //загрузка системы из области памяти 0x9f020000
## Booting image at 9f020000 ...
Uncompressing Kernel Image ... OK


Starting kernel ...


Linux version 2.6.32.25 (openwrt@ampere) (gcc version 4.3.3 (GCC) ) #1 Fri Nov 19 20:27:50 PST 2010
bootconsole [early0] enabled
CPU revision is: 00019374 (MIPS 24Kc)
Atheros AR7240 rev 2, CPU:350.000 MHz, AHB:175.000 MHz, DDR:350.000 MHz
Determined physical RAM map:
memory: 02000000 @ 00000000 (usable)
и так далее ...

Поздравляю! 
Теперь устройство доступно по адресу 192.168.1.1 на LAN-порту.

P.S. Если статья действительно помогла тыкнете в качестве бонуса на банера гугловские хочу проверить зароботок на рекламе AdSense =)

aвтор: Я aka Delix

4. FAQ
(в процесс разработки)
В: Какая микросхема будет работать от 2.5V ?
O: Микросхема ST3232B (http://www.datasheetcatalog.com/datasheets_pdf/S/T/3/2/ST3232B.shtml) работает от 2,5 Вольт. 

В: А как потом вернуть заводскую прошивку?
О: http://wiki.openwrt.org/toh/tp-link/tl-wr741nd#back.to.original.firmware тут описан способ установки родной прошивки.

В: Подключаюсь путтей, перепробовал массу кодировок, а всё равно вижу кракозябры (читается часть, типа кусочек времени, AP91 и тд. Дождаться Autobooting in 1 seconds не получается (не читается). 
О: Собрал схему согласования на к561лн2 и всё ок прошилось.

В: У меня есть кабель Siemens DCA-510 на PL2303HX можно ли его как-то использовать для этого?
О: Отлично! Кабель работает. Подпаял только Tx, Rx и GND.

В: О: Тут есть путаница с кабелями, подходит любой Jtag кабель, я взял на MAX232, подключал RX, TX и землю, питание не подключал, отно нужно для питания кабеля, у меня кабель с питанием. Плата 2 ревизии на 2.5 вольт.

В: А в чем разница между openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory и openwrt-ar71xx-tl-wr741nd-v1-squashfs-sysupgrade кроме размера :) ?
О: http://wiki.openwrt.org/doc/howto/generic.sysupgrade

В: Устройство корректно прошилось через кабель на микросхеме CP2102. Кабель на микросхеме PL2303HX не сработал - на выходе были кракозябры при всех возможных вариациях скорости соединения.
О: а резистор в 10кОм между tx и vcc на uart не пробовали припаять... проблема бы решилась... ;)





5. Дополнительные материалы

1. Прошивка напрямую флешки ( M25P64-VMF6P )
aвтор: "Аноним"
TP-Link 1043
Удалось прошить флэшку. 
Использовался программатор на резисторах LPT порт.
Для нуждающихся вот файл прошивки:
http://dl.dropbox.com/u/58486160/SPI/tlwr1043.bin

Завелось сразу. 
К сожалению, но родная микросхемка отказалась прошиваться, как ранее писал, не снималась защита от записи. Купил новые, прошилась сразу и без ошибок.
Вот как было сделано:

http://dl.dropbox.com/u/58486160/20120214_013.jpg

http://dl.dropbox.com/u/58486160/20120214_014.jpg

Шлейв от жесткого диска РС, через один провод на корпус, питание бралось от компьютера(3.3в).
Еще одно, под 16ти-ногой флешкой (M25P64-VMF6P стоимость 142р) есть площадка для установки и восьминогой. Так что если найдется с 8 ногами, смело берите.

Добавлено:
http://dl.dropbox.com/u/58486160/20120214_018.jpg
http://dl.dropbox.com/u/58486160/20120214_019.jpg
http://dl.dropbox.com/u/58486160/20120214_020.jpg


2. Установка пакета ip в TP-Link WR-741ND.
автор: Алексей aka Cosmonauter
Т.к. на флешке мало места под этот пакет то можно его поставить в /tmp.
После подключения к роутеру можно установить пакет "ip" либо с репозитория OpenWRT либо командой:

wget -q -O /tmp/ip http://drumnbass.org.ua/openwrt_ip_without_install/ar741/ip && sleep 1 && chmod 755 /tmp/ip && sleep 1 && ln -s /tmp
/ip /usr/sbin/ip


3. Проблемы с родной прошивкой  (связанные с ее большим размером).
автор: Илья

Обратите внимание, НЕЛЬЗЯ шить через Putty прошивкой длиной более 7с0000 !!! (большая длина, может означать наличие Boot).
Прошивка с русского сайта имеет большую длину.

Можно для уверенности прошивку в WinHex открыть и если увидим( справедливо для родной прошивки конечно):
h00000000
.... фигня нечитаемая...
....фигня нечитаемая...
h00019000
h00020000 01 00 00 00 54 50 2D 4C 49 4E 4B 20 54 65 63 68 TP-LINK Tech
h00020010 6E 6F 6C 6F 67 69 65 73 00 00 00 00 76 65 72 2E nologies ver.
h00020020 20 31 2E 30 00 00 00 00 00 00 00 00 00 00 00 00 1.0 
ТАК вот ЭТИМ НЕЛЬЗЯ ПРОШИВАТЬ через Putty!!!! 

А если: 
h00000000 01 00 00 00 54 50 2D 4C 49 4E 4B 20 54 65 63 68 TP-LINK Tech
h00000010 6E 6F 6C 6F 67 69 65 73 00 00 00 00 76 65 72 2E nologies ver.
h00000020 20 31 2E 30 00 00 00 00 00 00 00 00 00 00 00 00 1.0 
то этим скорее всего можно.

Как видим прошивка во флешке Тр-link начинается с адреса h00020000, а до этого и есть Boot.

(Скорее всего Boot одинаков для всех Тр-link TL-WRххх и в случае гибели НЕ 1043, можно попробовать этот Boot закатать с нулевого по 1FFFF адрес(но это предположение нужен фул-флеш любого другого роутера).

При обновлении через web интерфейс(при подключенном Putty) в терминале видим--
--ERASE First 0x0 last 0x7-- sector size 0x10000
т.е стирается и сам загрузчик из флешки? 

Наверное это причина гибели роутеров при прошивках.
Ради интереса я прервал процесс прошивки... и труп в руках!!! Симптомы-горит светодиод питания.(не делайте так, у меня флешка вторая была).
Таким образом мы видим, перед прошивкой первым делом стирается флешка, а уж потом в оперативку грузится дамп и только потом прошивается память флеш! Любой сбой или завис и труп гарантирован, а без загрузчика как все поняли только прошивать флешку напрямую!

В связи с этим- не пренебрегайте отключением всех клиентов от роутера и отключением WiFi в интерфейсе! Ведь после стирания флешки, роутер продолжает работать, прошивка вся в памяти(и старая, но не факт что вся новая)


6. Полезные ссылки:
1. Сборка кабель под RS-232C.

2. Прошивка OpenWRT
http://wiki.openwrt.org/toh/tp-link/tl-wr841nd
http://www.odmins-it.ru/article/100/
http://wiki.openwrt.org/toh/tp-link/tl-wr741nd