zepete: (Default)
[personal profile] zepete
Функциональность tl-mr3020 вынутого из коробки соответствует Tenda A5, только на него можно установить альтернативную прошивку с Linux. После чего его можно использовать как переходник wifi->eth, а если самостоятельно скомпилировать прошивку, то можно реализовать и более хитрые устройства, вроде интернет радио. Я для этого использовал прошивку openwrt. Для mr3020 необходимо использовать версию attitude_adjustment 12.09.


  1. Типы прошивок.
    Все прошивки для tl-mr3020 бывают 2 типов: с загрузчиком и без.
    Встроенное программное обеспечение использует прошивку с загрузчиком, а openwrt и загрузчик без загрузчика. В openwrt прошивка с загрузчиком называется "factory", а без загрузчика "sysupgrade".
    Прошивки openwrt делятся еще на два типа: с возможностью отката на начальные настройки linux и без возможности отката. Прошивка с возможностью отката называется "Squashfs", а без возможности отката - JFFS2. Как это пародоксально не звучит, но прошивка с возможностью отката меньшего размера, WIKI openwrt рекомендует использовать ее. В реальности, роутер с прошивкой JFFS2 даже не загружается до конца. То есть использовать можно только прошивку "Squashfs".

  2. Где взять прошивку.
    Прошивку можно скомпилировать самостоятельно, а можно использовать уже готовую на сайте openwrt: прошивка без загрузчика и с загрузчиком.

  3. Установка openwrt с web-интерфейса tl-mr3020.
    Этот способ подробно описан в руководстве пользователя, в разделе "6.8.3 Обновление встроенного ПО".
    Только файл с прошивкой необходимо брать с сайта openwrt или скомпилированный самостоятельно и оканчивающийся на "squashfs-factory.bin".

  4. Установка openwrt c помощью u-boot.
    Заводская прошивка представляет собой ПО на базе linux -root пароль - 5up,- загружаемого при помощи загрузчика U-Boot. u-boot позволяет перепрошить устройство по сети.

    1. Для этого необходимо:
      -паяльник, желательно с регулировкой температуры, вроде этого или этого;
      -припой ПОС61;
      -флюс ФТС/канифоль;
      -переходник usb2ttl, переходник com2ttl возможно работать не будет, ибо он требует наличия хорошего com порта с питанием выходного драйвера +- 12В, что в современных компьютерах практически не бывает, ибо даже com порт с умножителем напряжения редкость, подойдет любой, но если предполагается его использовать еще для программирования arduino, то надо выбирать с выводом DTR;
      -молоток, нож и другой слесарный инструмент для вскрытия корпуса;
      -разъем "Single Row Male Pin Header Connector";
      -3 провода "Female To Female jumper wire";
      -программа tfpd32;
      -установть HiperTerminal, а если его нет в windows, то воспользоваться внешней программой PuTTY.

    2. Вскрыть корпус.
      Первым делом надо доставать плату из корпуса, что бы добраться до выводов последовательного порта. Что очень сложно, ибо корпус на защелках, склеен и со штырями вставленными в трубки на крышке для крепления платы, что делает корпус очень прочным и сложно разбираемым.
      Без нарушения товарного вида это сделать не получиться: будет мешать клей на углах корпуса, - поэтому будет несколько заусенцев и один оторванный штырь.

      Вскрытие корпуса происходит за 5 этапов.
      1. Постучать молотком вдоль места перехода белого корпуса в серую крышку.
      2. Отщелкнуть защелку на самой слабой гране.
      3. Размонтировать корпус начиная от этой защелки в напрвлении против часовой стрелки.
      4. Отщелкнуть последнюю защелку.
      5. Поддеть крышку на стороне противоположной светодиодам и повернуть крышку.

      Фотографии корпуса и крышки.



    3. Вынуть плату и припаять к "дыркам" в плате "Single Row Male Pin Header Connector".
      С этим сложностей не должно быть.

    4. Подсоединить плату роутора к usb2ttl согласно таблице.
      номер контакта на плате роутораназвание контакта на плате usb2ttl
      1TXD
      2RXD
      3GND

      Первый вывод обозначен квадратиком на плате. Если при загрузке будет абракадабра в терминале, то значит надо припаять резистор в 10к между выводом 1 и 4.
    5. Вставить usb2ttl в компьютер и установить драйвер.
    6. Запустить эмулятор терминала. В нем выбрать настройки компорта: 115200, 8 бит, без контроля четности, один стоп бит, нет контроля четности.
    7. Переименовать файл с прошивкой типа "squashfs-sysupgrade" в openwrt.bin.
      Это делается для сокращения длины коанд: скаченный файл будет иметь очень длинное имя, вроде "openwrt-ar71xx-generic-tl-mr3020-v1-squashfs-sysupgrade.bin".
    8. Запустить tfpd32, указав ему путь к файлу "openwrt.bin".
    9. Подсоединить к компьютеру роутер через витую пару.
    10. Выставить в компьютере ip адрес 192.168.0.200.
    11. Подать на роутор питание.
    12. Очень быстро набрать на клавиатуре магическую комбинацию 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>

    13. Последовательно ввести команды.
      команданазначение
      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
      На этом процедура перепрошивки закончена.


  5. Откат на заводскую прошивку без удаления загрузчика.
    WIKI openwrt при описании отката на заводскую прошивку не учитывает наличие загрузчика в распространяемых TP-LINK прошивках. Поэтому, в результате следования инструкции WIKI openwrt, на выходе получается "кирпич" мигающий светодиодами. Что бы не получить кирпич, надо удалить u-boot из прошивки.
    1. Превращение прошивки с загрузчиком в прошивку без загрузчика.
      Для удаления загрузчика потребуется 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.

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

    2. Прошивка при помощи luci с компьютера в картинках.



      В конце нажать кнопку "установить...".

    3. Отткат по сети из эмулятора терминала.
      Для этого потребуется программа PuTTY и Xlight, встроенный в windows ftp сервер или winscp. Встроенный в windows сервер устанавливается через "панель управления"->"установка и удаление программ"->"установка компонентов windows"->"Internet Information services (IIS)"->"состав"->"служба FTP", а настраивается в "панель управления"->"Администрирование"->"Internet information services".
      Если уже задан root пароль, то надо заходить по протоколу SSH, а если нет, то по протоколу Telnet.
      На все непонятные запросы нажимать ввод, а на запрос user - root; passwd - пароль пользователя root.
      1. Скопировать файл прошивки в папку /tmp роутора.
        Это можно сделать при помощи ftp-сервера Xlight на компьютере и wget на роуторе.
        Для этого необходимо:
        -запустить на компьютере Xlight, настроив на файл с заводской прошивкой без загрузчика;
        -в эмуляторе терминала выполнить команду cd /tmp;
        -загрузить прошивку командой wget ftp://192.168.0.200 firmware.bin, где 192.168.0.200 это адрес компьютера, а firmware.bin - имя файла с прошивкой.
        Или используя winscp: в нем тупо скопировать файл из одной панели в другую.

      2. В эмуляторе терминала выполнить команду "mtd -r write factory_firmware.bin firmware", где factory_firmware.bin - это имя файла с прошивкой. Возможно еще воспользоваться командой "sysupgrade -n firmware.bin"

      3. Дождаться перезагрузки.

    4. Откат используя последовательный порт роутора.
      Это можно сделать аналогично прошивки по сети из эмулятора терминала, только используя последовательный порт для соединения вместо сети.
      Только это делать бессмысленно, ибо требуется дополнительное оборудование. Но зато имеет смысл откат из u-boot в случае превращения роутора в кирпич при неудачной прошивке. Как это делается я описал выше, только необходимо использовать заводскую прошивку обрезанную от загрузчика.

Прошивка загрузчика

Date: 2016-09-08 04:22 pm (UTC)
From: [identity profile] plastalex.livejournal.com
А не подскажете как:

1. Сделать бекап существующей прошивки через u-boot (логина/пароля в саму прошивку нет)
2. Если невозможно реализовать пункт 1 вопроса, как залить альтернативный загрузчик breed вместо u-boot? У breed есть веб интерфейс и функция бекапа существующих разделов (flash, Art)

Re: Прошивка загрузчика

Date: 2016-09-08 10:56 pm (UTC)
From: [identity profile] plastalex.livejournal.com
Сам себе отвечу. Цепляемся RS232
Качаем 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)
From: [identity profile] zepete.livejournal.com
Ответ неправильный. Перед "tftpboot 0x81000000 breed-ar9331.bin"
должно быть "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)
From: [identity profile] plastalex.livejournal.com
Не страшно. В breed мождно прям из его веб интерфейса изменить эти данные. Хотя мысль верная.

Re: Прошивка загрузчика

Date: 2016-09-10 02:11 pm (UTC)
From: [identity profile] zepete.livejournal.com
Писать свой эмулятор терминала, который будет уметь запускать команду "md" и ее вывод расшифровывать и записывать в файл. Другого способа нет, так как uboot умеет только считывать файл по сети.

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)
From: [identity profile] plastalex.livejournal.com
И все таки не совсем понятно, как так записать вторые 64 Кб с информацией о устройстве в ОЗУ, перед прошивкой breed, а потом вернуть их на место??? Или что имеется ввиду???

Re: Прошивка загрузчика

Date: 2016-09-14 05:10 pm (UTC)
From: [identity profile] zepete.livejournal.com
Командой "cp.b 0x9F000000 0x80000000 0x20000".

Флеш, по определению, это eeprom со страничным доступом.
Поэтому чтобы сохранить хвост страницы, который не надо изменять, надо сначала считать, а потом записать назад вместе с новыми данными.

Re: Прошивка загрузчика

Date: 2016-09-14 07:54 pm (UTC)
From: [identity profile] plastalex.livejournal.com
Спасибо за ответ. Если не затруднит разъясните как правильно понимать адресование страниц, на примере тех что используются: 0x9F000000 0x80000000 0x20000

Re: Прошивка загрузчика

Date: 2016-09-15 11:45 pm (UTC)
From: [identity profile] zepete.livejournal.com
Гм.
Я думал вы в этом лучше меня разбираетесь, так как про 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 часа времени истратил.

Profile

zepete: (Default)
zepete

January 2026

S M T W T F S
    1 23
4 56 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 14th, 2026 07:12 am
Powered by Dreamwidth Studios