Функциональность tl-mr3020 вынутого из коробки соответствует Tenda A5, только на него можно установить альтернативную прошивку с Linux. После чего его можно использовать как переходник wifi->eth, а если самостоятельно скомпилировать прошивку, то можно реализовать и более хитрые устройства, вроде интернет радио. Я для этого использовал прошивку openwrt. Для mr3020 необходимо использовать версию attitude_adjustment 12.09.
Откат на заводскую прошивку без удаления загрузчика.
WIKI openwrt при описании отката на заводскую прошивку не учитывает наличие загрузчика в распространяемых TP-LINK прошивках. Поэтому, в результате следования инструкции WIKI openwrt, на выходе получается "кирпич" мигающий светодиодами. Что бы не получить кирпич, надо удалить u-boot из прошивки.
- Типы прошивок.
Все прошивки для tl-mr3020 бывают 2 типов: с загрузчиком и без.
Встроенное программное обеспечение использует прошивку с загрузчиком, а openwrt и загрузчик без загрузчика. В openwrt прошивка с загрузчиком называется "factory", а без загрузчика "sysupgrade".
Прошивки openwrt делятся еще на два типа: с возможностью отката на начальные настройки linux и без возможности отката. Прошивка с возможностью отката называется "Squashfs", а без возможности отката - JFFS2. Как это пародоксально не звучит, но прошивка с возможностью отката меньшего размера, WIKI openwrt рекомендует использовать ее. В реальности, роутер с прошивкой JFFS2 даже не загружается до конца. То есть использовать можно только прошивку "Squashfs". - Где взять прошивку.
Прошивку можно скомпилировать самостоятельно, а можно использовать уже готовую на сайте openwrt: прошивка без загрузчика и с загрузчиком. - Установка openwrt с web-интерфейса tl-mr3020.
Этот способ подробно описан в руководстве пользователя, в разделе "6.8.3 Обновление встроенного ПО".
Только файл с прошивкой необходимо брать с сайта openwrt или скомпилированный самостоятельно и оканчивающийся на "squashfs-factory.bin". - Установка openwrt c помощью u-boot.
Заводская прошивка представляет собой ПО на базе linux -root пароль - 5up,- загружаемого при помощи загрузчика U-Boot. u-boot позволяет перепрошить устройство по сети. - Для этого необходимо:
-паяльник, желательно с регулировкой температуры, вроде этого или этого;
-припой ПОС61;
-флюс ФТС/канифоль;
-переходник usb2ttl, переходник com2ttl возможно работать не будет, ибо он требует наличия хорошего com порта с питанием выходного драйвера +- 12В, что в современных компьютерах практически не бывает, ибо даже com порт с умножителем напряжения редкость, подойдет любой, но если предполагается его использовать еще для программирования arduino, то надо выбирать с выводом DTR;
-молоток, нож и другой слесарный инструмент для вскрытия корпуса;
-разъем "Single Row Male Pin Header Connector";
-3 провода "Female To Female jumper wire";
-программа tfpd32;
-установть HiperTerminal, а если его нет в windows, то воспользоваться внешней программой PuTTY. - Вскрыть корпус.
Первым делом надо доставать плату из корпуса, что бы добраться до выводов последовательного порта. Что очень сложно, ибо корпус на защелках, склеен и со штырями вставленными в трубки на крышке для крепления платы, что делает корпус очень прочным и сложно разбираемым.
Без нарушения товарного вида это сделать не получиться: будет мешать клей на углах корпуса, - поэтому будет несколько заусенцев и один оторванный штырь.
Вскрытие корпуса происходит за 5 этапов.- Постучать молотком вдоль места перехода белого корпуса в серую крышку.
- Отщелкнуть защелку на самой слабой гране.
- Размонтировать корпус начиная от этой защелки в напрвлении против часовой стрелки.
- Отщелкнуть последнюю защелку.
- Поддеть крышку на стороне противоположной светодиодам и повернуть крышку.
- Вынуть плату и припаять к "дыркам" в плате "Single Row Male Pin Header Connector".
С этим сложностей не должно быть. - Подсоединить плату роутора к usb2ttl согласно таблице.
номер контакта на плате роутора название контакта на плате usb2ttl 1 TXD 2 RXD 3 GND
Первый вывод обозначен квадратиком на плате. Если при загрузке будет абракадабра в терминале, то значит надо припаять резистор в 10к между выводом 1 и 4. - Вставить usb2ttl в компьютер и установить драйвер.
- Запустить эмулятор терминала. В нем выбрать настройки компорта: 115200, 8 бит, без контроля четности, один стоп бит, нет контроля четности.
- Переименовать файл с прошивкой типа "squashfs-sysupgrade" в openwrt.bin.
Это делается для сокращения длины коанд: скаченный файл будет иметь очень длинное имя, вроде "openwrt-ar71xx-generic-tl-mr3020-v1-squashfs-sysupgrade.bin". - Запустить tfpd32, указав ему путь к файлу "openwrt.bin".
- Подсоединить к компьютеру роутер через витую пару.
- Выставить в компьютере ip адрес 192.168.0.200.
- Подать на роутор питание.
- Очень быстро набрать на клавиатуре магическую комбинацию tpl, когда в эмуляторе терминала появится текст.
U-Boot 1.1.4 (Mar 20 2012 - 11:37:54)
AP121 (ar9330) U-boot
DRAM: 32 MB
led turning on for 1s...
После чего появится промптор u-boot.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
No valid address in Flash. Using fixed address
: cfg1 0x5 cfg2 0x7114
eth0: 00:03:7f:09:0b:ad
ag7240_phy_setup
eth0 up
: cfg1 0xf cfg2 0x7214
eth1: 00:03:7f:09:0b:ad
athrs26_reg_init_lan
ATHRS26: resetting s26
ATHRS26: s26 reset done
ag7240_phy_setup
eth1 up
eth0, eth1
Autobooting in 1 seconds
hornet> - Последовательно ввести команды.
Как это выглядит в эмуляторе терминала.команда назначение setenv ipaddr 192.168.0.254 установка ip адреса роутора setenv serverip 192.168.0.200 установка ip адреса компьютера с которого будет скачаваться прошивка tftpboot 0x80000000 openwrt.bin загрузка в RAM прошивки erase 0x9f020000 +0x3c0000 очистка flash cp.b 0x80000000 0x9f020000 0x3c0000 копирование прошивки из RAM в flash. bootm 0x9f020000 перезагрузка
На этом процедура перепрошивки закончена.hornet> setenv ipaddr 192.168.0.254
hornet> setenv serverip 192.168.0.200
hornet> tftpboot 0x80000000 openwrt.bin
dup 1 speed 1000
Using eth1 device
TFTP from server 192.168.0.200; our IP address is 192.168.0.254
Filename 'original.bin'.
Load address: 0x80000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
######################################################
done
Bytes transferred = 3932160 (3c0000 hex)
hornet> erase 0x9f020000 +0x3c0000
First 0x2 last 0x3d sector size 0x10000
61
Erased 60 sectors
hornet> cp.b 0x80000000 0x9f020000 0x3c0000
Copy to Flash... write addr: 9f020000
done
hornet> bootm 0x9f020000
## Booting image at 9f020000 ...
Uncompressing Kernel Image ... OK
Фотографии корпуса и крышки.
WIKI openwrt при описании отката на заводскую прошивку не учитывает наличие загрузчика в распространяемых TP-LINK прошивках. Поэтому, в результате следования инструкции WIKI openwrt, на выходе получается "кирпич" мигающий светодиодами. Что бы не получить кирпич, надо удалить u-boot из прошивки.
- Превращение прошивки с загрузчиком в прошивку без загрузчика.
Для удаления загрузчика потребуется hex редактор, я использовал Frhed (Free hex editor): он бесплатный и не требует установки.
В нем надо будет удалить первые 20200h байт до появления строки.
В интернете некоторые пишут, что удалять до первого появления строки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.
Но но это не правильно, ибо файл с заводской прошивкой начинается с этой последовательности и если следовать этой рекомендации, то удалять нечего будет. - Прошивка при помощи luci с компьютера в картинках.
В конце нажать кнопку "установить...". - Отткат по сети из эмулятора терминала.
Для этого потребуется программа PuTTY и Xlight, встроенный в windows ftp сервер или winscp. Встроенный в windows сервер устанавливается через "панель управления"->"установка и удаление программ"->"установка компонентов windows"->"Internet Information services (IIS)"->"состав"->"служба FTP", а настраивается в "панель управления"->"Администрирование"->"Internet information services".
Если уже задан root пароль, то надо заходить по протоколу SSH, а если нет, то по протоколу Telnet.
На все непонятные запросы нажимать ввод, а на запрос user - root; passwd - пароль пользователя root.- Скопировать файл прошивки в папку /tmp роутора.
Это можно сделать при помощи ftp-сервера Xlight на компьютере и wget на роуторе.
Для этого необходимо:
-запустить на компьютере Xlight, настроив на файл с заводской прошивкой без загрузчика;
-в эмуляторе терминала выполнить командуcd /tmp;
-загрузить прошивку командойwget ftp://192.168.0.200 firmware.bin, где 192.168.0.200 это адрес компьютера, а firmware.bin - имя файла с прошивкой.
Или используя winscp: в нем тупо скопировать файл из одной панели в другую. - В эмуляторе терминала выполнить команду
"mtd -r write factory_firmware.bin firmware", где factory_firmware.bin - это имя файла с прошивкой. Возможно еще воспользоваться командой "sysupgrade -n firmware.bin"
Дождаться перезагрузки. - Скопировать файл прошивки в папку /tmp роутора.
- Откат используя последовательный порт роутора.
Это можно сделать аналогично прошивки по сети из эмулятора терминала, только используя последовательный порт для соединения вместо сети.
Только это делать бессмысленно, ибо требуется дополнительное оборудование. Но зато имеет смысл откат из u-boot в случае превращения роутора в кирпич при неудачной прошивке. Как это делается я описал выше, только необходимо использовать заводскую прошивку обрезанную от загрузчика.
Прошивка загрузчика
Date: 2016-09-08 04:22 pm (UTC)1. Сделать бекап существующей прошивки через u-boot (логина/пароля в саму прошивку нет)
2. Если невозможно реализовать пункт 1 вопроса, как залить альтернативный загрузчик breed вместо u-boot? У breed есть веб интерфейс и функция бекапа существующих разделов (flash, Art)
Re: Прошивка загрузчика
Date: 2016-09-08 10:56 pm (UTC)Качаем breed отсюда: http://breed.hackpascal.net/breed-ar9331.bin
Поднимаем tftp сервер и указываем IP на сервере 192.168.1.100
При Загрузке роутера быстро нажимаем tpl, входим в u-boot и выполняем команды:
tftpboot 0x81000000 breed-ar9331.bin
erase 0x9f000000 +0x20000
cp.b 0x81000000 0x9f000000 0x20000
bootm 0x9f000000
После чего перезапускаем командой reset и снова входим в u-boot, уже breed
Заходим с ПК по адресу 192.168.1.1, страничка будет на китайском, через гугл переводчик переводим и делаем резервную копию прошивки.
Все теперь можно шить другую прошивку.
Re: Прошивка загрузчика
Date: 2016-09-10 02:18 pm (UTC)должно быть "cp.b 0x9F000000 0x81000000 0x20000" для сохранения заводских настроек, иначе вместо них будет мусор.
https://github.com/pepe2k/u-boot_mod#using-uart-u-boot-console-and-tftp-server
Due to differences in FLASH memory map and sizes of original and modified version of U-Boot, you must first make a backup of the partition with original version in RAM. If you skip this step or make a mistake, your device will be probably broken!
This step is different between supported models, so you should pay attention to the size of image with modified version of U-Boot, round it to the nearest multiple of 64 KiB and use this value in all next steps.
For example, if image of the modified version is 123 KiB (0x1EC00) you must first make a backup of 128 KiB (0x20000) in RAM, at the same address where you are going to download the image:
hornet> cp.b 0x9F000000 0x80800000 0x20000
Using the same offset address in RAM for backup and new image will end up with combination of both images and preserve additional data like MAC address, model number and PIN.
Re: Прошивка загрузчика
Date: 2016-09-10 02:54 pm (UTC)Re: Прошивка загрузчика
Date: 2016-09-10 02:11 pm (UTC)https://wiki.openwrt.org/ru/toh/tp-link/tl-mr3020
hornet> help
? - alias for 'help'
bootm - boot application image from memory
cp - memory copy
erase - erase FLASH memory
help - print online help
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
reset - Perform RESET of the CPU
setenv - set environment variables
tftpboot- boot image via network using TFTP protocol
version - print monitor version
2. Без наличия программатора это рискованно. Но если хотите, то делается так.
https://github.com/pepe2k/u-boot_mod#using-uart-u-boot-console-and-tftp-server
1. Выполнить все что у меня написано в посте до 13 пункта, под openwrt.bin понимается образ нового загрузчика.
2. Потом в терминале выполнить команды.
setenv ipaddr 192.168.0.254
setenv serverip 192.168.0.200
cp.b 0x9F000000 0x80000000 0x20000
tftpboot 0x80000000 openwrt.bin
erase 0x9F000000 +0x20000
cp.b 0x80000000 0x9F000000 0x20000
reset
Re: Прошивка загрузчика
Date: 2016-09-11 08:23 pm (UTC)Re: Прошивка загрузчика
Date: 2016-09-14 05:10 pm (UTC)Флеш, по определению, это eeprom со страничным доступом.
Поэтому чтобы сохранить хвост страницы, который не надо изменять, надо сначала считать, а потом записать назад вместе с новыми данными.
Re: Прошивка загрузчика
Date: 2016-09-14 07:54 pm (UTC)Re: Прошивка загрузчика
Date: 2016-09-15 11:45 pm (UTC)Я думал вы в этом лучше меня разбираетесь, так как про breed знаете:)
1. Про ram и адресное пространство.
В mips используется виртуальная память, то есть адрес в коде программы 0xXXXXXXXX не равен адресу 0xXXXXXXXX на шине адреса микросхемы памяти.
Упрощенно. Виртуальный адрес от 0 до 0x80000000 преобразуется в физический сложным образом, с разбиением на страницы, по типу i386, а выше 0x80000000 простым отбрасыванием старшего разряда.
https://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/mips.html
http://www.rockbox.org/wiki/pub/Main/IriverLPlayerPort/MIPS-4KEcDataSheet.pdf
https://people.freebsd.org/~adrian/mips/MD00343-2B-24K-SUM-03.11.pdf
Код u-boot находится по адресам вокруг физического адреса 0x1FC00000, так как по этому адресу берется первая команда.
http://www.nulltrace.org/2013/04/mips-bootstrapping.html
Каким образом получается доступным адрес 0x1FC00000 (за первыми 500М), когда всего в наличии 32M, я не знаю, но это означает, что начальные адреса можно смело использовать по своему усмотрению, не боясь что-то испортить.
Поэтому указывается адрес 0x80000000 или близкие к нему значения, который на самом деле является адресом 0x0, так как 32 бит надо обнулить. Простые пользователи указывают адрес 0x80000000, а испорченные ibm pc, резервируют один-два мегабайта для переменных загрузчика, то есть адреса 0x80100000 или 0x80200000. Openwrt рекомендует 0x80000000, поэтому я его и указал. Это без разницы для перезаписи маленького загрузчика, так как u-boot там свои переменные не хранит, иначе способ указанный openwrt не работал.
2. Про spi/nor flash.
В u-boot одна команда cp, на самом деле, является двумя совершенно разными командами: перемещения ram и перемещения flash. Что бы этого достичь надо что бы в команде размер перемещаемого блока в обоих случаях указывался в байтах, иначе они будут не единообразными.
Какую команду из двух использовать, определяется адресами указанными в команде.
http://www.denx.de/wiki/view/DULG/UBootCmdGroupMemory
http://www.denx.de/wiki/view/DULG/UBootCmdGroupFlash
Поэтому 0x20000 - это число страниц flash умноженное на размер страницы.
0x9F000000 - это адрес flash, можешь понимать его как имя файла. Какой использовать указано на сайте openwrt, если ему не веришь, то выполняй команду fli, если она доступна на mr2030.
Надеюсь теперь всё понятно?
В следующий раз старайтесь сами разбираться, я на это 4 часа времени истратил.