Увеличиваем объем памяти роутеру TP-Link

https://pp.vk.me/c638126/v638126063/262c7/cXFPYLvh3Lk.jpg

Прочитав несколько обзоров уважаемого lolipop открыл для себе прошивку OpenWrt. Начал гуглить и узнал сколько всяких интересных проектов можно сделать на базе этой прошивки и роутера с USB разъемом.
В качестве примера увеличение памяти роутера TP-Link на примере TL-MR3220v2 используя память Winbond W25Q128.
Тем кому интересно прошу под кат.

Для начала захотел попробовать торрент качалку на внешний HDD который можно в любой момент отключить. Сразу же споткнулся о маленькое колличество памяти. Поиски решения привели к 2-м вариантам.
1)Покупка и использование USB хаба кому интересно здесь инструкция.
2)Увеличение установленной в роутере памяти.
Я решил идти по 2-му пути т.к. программатор есть, паяльная станция тоже.
Для этого на Ali была заказана память. Лот из 5 микросхем Winbond W25Q128. Ссылка на продавца в начале обзора. Отправил очень быстро. Дошло меньше чем за 2 недели.

Микросхемы пришли в стандартном желтом пакетике. Внутри еще один пакет в котором лежат все 5 микросхем обмотанный в дополнительный слой пупырчатого полиэтилена.
http://img.mysku-st.ru/uploads/images/01/88/08/2015/06/01/263c46.jpg

http://img.mysku-st.ru/uploads/images/01/88/08/2015/06/01/145a63.jpg

Микросхемы новые, следов пайки нет. На этом непосредственно обзор закончен и дальше будет практическое применение.

Так же будет использован программатор на CH431A на который было уже несколько обзоров. Заказан был здесь
И панелька для 25 серии. Заказана была здесь

Все что вы делаете дальше, вы делаете на свой страх и риск. Не делайте шаг который вы не понимаете.

Прошивка в OpenWrt.
Еще до того как память пришла роутер был уже прошит на OpenWrt. Ничего сложного в этом нет, скачиваем прошивку для роутера с официального сервера openwrt downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/
нас интересует файл openwrt-ar71xx-generic-tl-mr3220-v2-squashfs-factory.bin
Обязательно со словом factory. Оно означает что файл предназначен для перехода с заводской прошивки. Выбираем в Web интерфейсе обновление ПО. Роутер перезагружается после чего мы получаем рабочий роутер на OpenWrt.

Прошивка.
Прошивка состоит из 3-х достаточно больших частей.
1)Загрузчик
2)Непосредственно прошивка
3)Таблица калибровок радиомодуля Wi-Fi (art)

1.Загрузчик
Он нам нужен не простой а с поддержкой 16 мегабайтных флешек. В качестве загрузчика я использую U-Boot от pepe2k.
Много информации по загрузчику есть на странице проекта
Непосредственно здесь можно скачать загрузчик под определенные модели.
Здесь список памяти поддерживаемой загрузчиком U-Boot от pepe2k.
Под загрузчик у роутеров TP-Link отводится диаппазон адресов 0x00000000-0x00020000.
Это первые 128кб флеш памяти. При этом размер скачиваемого загрузчика 64кб. Это нормально, я в дальнейшем объясню что с этим делать.
2.Прошивка
Здесь самая я столкнулся с самой большой проблемой. Нашел инструкцию по которой следовало что для того чтобы прошивка увидела всю память необходимо пересобирать ее под себя. Компьютера с линуксом не имею поэтому я продолжил поиск и наткнулся на следующее объявление (не реклама).
В которой нашел ссылку на пачку уже пропатченных прошивок. Там некоторое количество моделей среди которых был необходимый мне файл.
3.Таблица калибровок радиомодуля Wi-Fi (art)
Про таблицу и необходимость ее считывать и записывать отдельно хорошо написано по ссылке
Там предлагается считывать таблицу в оперативную память и потом как-то скачивать backup оттуда например посредством SCP, только не этого а этого. Я буду делать немного по своему с использованием программатора.

Собираем прошивку
Итак у нас уже есть файл загрузчика под вашу модель роутера + прошивка пропатченная под 16-мегабайтную память. И желательно дамп файл прошивки openwrt слитый с роутера.
Для непосредственной сборки нам нужен любой HEX редактор. Я буду использовать HEX WorkShop.
Открываем в HEX редакторе файл прошивки. Переходим в конец файла и видим что он займет
адреса только до 0x00F80000, для справки у 16 мегабайтной флешки 0x01000000 адресов. Значит нам нужно заполнить 80000 адресов.

http://img.mysku-st.ru/uploads/images/01/88/08/2015/06/01/fd7ac2.jpg

Опять же пользуясь ссылкой понятно что нам нужно перед прошивкой добавить 0x020000 адресов под загрузчик.
Делаем это командой «Edit-Insert»

http://img.mysku-st.ru/uploads/images/01/88/08/2015/06/01/8d7a4e.jpg

Обратите внимание. Необходимо заполнить добавляемое пространство символами FF как это показано на картинке.
После этого вставляем загрузчик в диапазон адресов 0x000000-0x010000. Я для этого выделяю адреса и вставляю командой «File-Insert File».
После этого необходимо вписать собственные Mac адрес, модель и pin. Далее цитата:
MAC адрес во всех роутерах начинается с адреса 0х1FC00. Под MAC адрес отводится, соотвественно, 6 байт.
Версия роутера начинается с адреса 0х1FD00. Запись роутера 3420 второй ревизии выглядит так: 3420000200000001
PIN начинается с адреса 0х1FE00. Длина 8 байт. PIN, например, 80751205 (тот, что вы видите на шильдике роутера) в файле прошивке будет выглядеть как 3830373531323035.
После этих действий мы заполним 0x00FA0000 от всей памяти. остается заполнить еще 0x60000 адресов. Для этого мы открываем дамп нашей прошивки и переходим на адрес 0x003A0000 и копируем все значения до 0x00400000 после чего вставляем в конец прошивки которую мы собираем. Получается как на скрине.

http://img.mysku-st.ru/uploads/images/01/88/08/2015/06/01/752636.jpg

После этого остается самое простое. Сохраняем файл, прошиваем флешку и запаиваем в роутер. Включаем роутер, заходим на 192.168.1.1 и наслаждаемся.

http://img.mysku-st.ru/uploads/images/01/88/08/2015/06/01/c7b115.jpg

Скомпиленные U-Boot`ы от pepe2k: tech-blog.pl/pliki/u-boot_for_tp-link_AR9331_by_pepe2k.tar.gz