TP-Link WDR3600/4300 - увеличение внутренней flash до 16Мб

Роутеры Tp-Link
Ответить
rik2000
Администратор
Сообщения: 6
Зарегистрирован: 22 авг 2025, 03:04

TP-Link WDR3600/4300 - увеличение внутренней flash до 16Мб

Сообщение rik2000 »

WDR3600/4300 - увеличение внутренней flash до 16Мб
далее установка из исходников OpenWrt

Изначяльно wdr4300/wdr3600 идет чип ПЗУ памяти (внутренняя флешка) w25q64 на 8 мбайт в корпусе sop-8.
Будем менять на w25q128 на 16Мб.
Потребуется программатор например СН341А ну или любой другой который умеет шить SPI.
Также потребуется комп(ноут) с установленной Linux например c Ubuntu.
Для программирования под Linux к программатору есть прога flashrom.

Маршрутизатор wdr3600/4300 собраны на atheros 9xxx в терминах openWRT wdr4300 - архитектура ath79.
tl-wdr3600_board-top-side-cpu.jpg
tl-wdr4300-v11.jpg
Будем менять штатную 8Мб флешку на 16Мб + USB-флешка для переноса на нее /overlay, чтобы вместо 16Мб после загрузки openWRT
получить несколько гигов "места на диске".

Сначала снимаем с платы маршрутизатора оригинальную флешку.
Втыкаем в программатор.
И аккуратненько, с последующим дублированием куда-ньть, сливаем с нее полный дамп. Получаем фуллфлеш.

Основная ценность дампа - раздел ART (Atheros radio test), в котором содержатся калибровачные данные для WiFi.
Без этих данных WiFi на таких Atheros чипах не заводится.
Есть еще MAC-адрес и WDS-pin, но эти цифры можно и с корпуса маршрутника списать и потом руками поправить.
Главное - НЕ ПОТЕРЯЙТЕ ART оригинальный.

Linux ядро OpenWrt (для этих tp-linkов - точно) использует DTS - Linux Device Tree для "detecting undetectable hardware" - определения неопределяемого железа.
Например, чтобы видеть разделы на SPI флешке. Она - не HDD, там не все так просто.

Первые 128кб - два блока по 64k - загрузчик
Стоковый загрузчик весит немного меньше, чем 128k=2x64k.
Но все равно, делаем кратно блокам 64кб.

Последние 64кб - раздел ART.
UPD это утверждение оказалось верно для wdr3600-wdr4300, а так же для wr842/wr841 старых ревизий.

Все, что последине - это сама прошивка

Сливаем фуллфлеш получяем файл 8Мб (8 388 608 байт) это 128 блоков по 64кб (по 65 536 байт).
Достанем оттуда ART-раздел в отдельный файл.

Код: Выделить всё

dd if=wdr3600_orig_8mb_full.bin of=wdr3600_art.bin bs=64k skip=127
Наша новая флешка имеет размер 16Мб. Это 16 777 216 байт. Оно же 256 блоков по 64кб.
И последним блоком №256 должен быть ART раздел, полученный нами на предыдущем шаге.
А первыми двумя блоками по 64кб, т.е. первые 128кб, первые 131 072 байта должен быть модифицированный загрузчик, который понимет 16Мб SPI flash.
uboot16.zip
(82.85 КБ) 41 скачивание
Загрузчик расположен по таким hex-адресам:

Код: Выделить всё

0x000000000000-0x000000020000 : "u-boot"
Вынем оригинальный u-boot из оригинальной прошивки - там содержатся MAC-адреса и PIN для WDS.

Код: Выделить всё

dd if=wdr3600_orig_8mb_full.bin of=uboot-orig.bin bs=64k count=2
Из файла стоковой прошивкой вынимаем MAC 0x0001FC00, Model 0x0001FD00, Pin WDS 0x0001FE00:

Код: Выделить всё

dd if=uboot-orig.bin of=macaddr.bin bs=1 skip=130048 count=6
dd if=uboot-orig.bin of=model.bin bs=1 skip=130304 count=8
dd if=uboot-orig.bin of=pin.bin bs=1 skip=130560 count=8
Готовим файл нового uboot16

Код: Выделить всё

dd if=/dev/zero bs=64k count=2 | tr '\000' '\377' > uboot16.bin
dd if=uboot_mod.bin of=uboot16.bin conv=notrunc
dd if=macaddr.bin of=uboot16.bin bs=1 count=6 seek=130048 conv=notrunc
dd if=model.bin of=uboot16.bin bs=1 count=8 seek=130304 conv=notrunc
dd if=pin.bin of=uboot16.bin bs=1 count=8 seek=130560 conv=notrunc
Для WDR3600 модель будет: 36 00 00 01 00 00 00 01
а для WDR4300: 43 00 00 01 00 00 00 01
Cобрали uboot16.bin
Теперь соберем full flash.
Качаем какая там версия для нашего маршрутизатора подходит файл openwrt-......-sysupgrade.bin
openwrt-ath79-generic-tplink_tl-wdr3600-squashfs-sysupgrade.bin - это любой файл скаченный с OpenWrt.

Код: Выделить всё

dd if=/dev/zero bs=1M count=16 | tr '\000' '\377' > wdr3600-16Mb-fullflash.bin
dd if=uboot-new.bin of=wdr3600-16Mb-fullflash.bin conv=notrunc
dd if=openwrt-ath79-generic-tplink_tl-wdr3600-squashfs-sysupgrade.bin of=wdr3600-16Mb-fullflash.bin bs=64k seek=2 conv=notrunc
Оригинальный образ OpenWrt будет содержит ядро, собраное с DTS под размер оригинальной флешки - 8Мб.
Соответственно, будет ожидать ART-раздел в конце этих 8 Мб.
Получившийся у нас 16Мб фулфлеш имеет ART в конце 16Мб.
И ядро его не увидит, WiFi не будет на борту.
Но мы запустимся пока так. А потом соберем OpenWrt из сырцов с правильной картой разделов под наши нужды.
Образ под карту DTS компилится на этапе make из исходников - поэтому руками поправить уже готовое никак.
Внимание! seek 255 - у нас 16Мб флеш образ, это 256 блоков по 64кб. и ART нам надо записать в последний блок 16Мб.

Код: Выделить всё

dd if=art.bin of=wdr3600-16Mb-fullflash.bin bs=64k seek=255 conv=notrunc
Теперь устанавливаем 16Мб флешку в программатор и заливаем в неё новый фулл.

Код: Выделить всё

sudo flashrom -p ch341a_spi -w wdr3600-16Mb-fullflash.bin -V
Если будет ошибка не соответствия при автоматической проверке делаем так:

Код: Выделить всё

sudo flashrom -p ch341a_spi -n -w wdr3600-16Mb-fullflash.bin -V
sudo flashrom -p ch341a_spi -v wdr3600-16Mb-fullflash.bin -V
Тоесть сначяла пишем без проверки, потом сверяем с файлом то, что записалось.

Все запаеваем микросхему на маршрутизатор, подключяемся к uart-консоли маршрутизатора, включаем и наблюдаем как старт.
Первый старт очень долгий - надо чтоб распаковалось все и настроился /overlay.
В конце будет что-то типа:

Код: Выделить всё

[   62.265196] done.
[   62.274803] jffs2: notice: (483) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 	orphan) found.
[   62.291806] mount_root: overlay filesystem has not been fully initialized yet
[   62.303130] mount_root: switching to jffs2 overlay
[   62.332760] overlayfs: upper fs does not support tmpfile.
Все ок.
Проверяем: ip a - должны быть все интерфейсы wlan0/1, df -h - покажет что /overlay примерно 3.4-3.6Mb.
Если все так то можно переходить к сборке своей версии ОpenWrt.

Для Debian - Ubuntu:

Код: Выделить всё

sudo apt  update
sudo apt upgrade
sudo apt install  subversion git
sudo apt install g++ libncurses5-dev zlib1g-dev gawk libssl-dev unzip make gcc-multilib 
Далее определяемся какую версию OpenWrt мы будем собирать например финал 24,10,02
Создаем клон репозитария:

Код: Выделить всё

git clone https://github.com/openwrt/openwrt.git -b v24.10.2 && cd ~/openwrt && ./scripts/feeds update -a && ./scripts/feeds install -a && make prereq
Далее попадем в меню конфигурации просто выходим без сохранения!
Теперь нам надо поправить разметку под 16Мб.

Код: Выделить всё

nano openwrt/target/linux/ath79/dts/ar9344_tplink_tl-wdrxxxx.dtsi
в нем ищем блок, где описано, какого размера будет раздел с firmware и откуда начнется раздел art
partition@20000 {
compatible = "tplink,firmware";
label = "firmware";
reg = <0x020000 0x7d0000>;
};

art: partition@7f0000 {
label = "art";
reg = <0x7f0000 0x010000>;
read-only;
};
Меняем на:

Код: Выделить всё

partition@20000 {
			compatible = "tplink,firmware";
			label = "firmware";
			reg = <0x020000 0xfd0000>;
		};

		art: partition@7f0000 {
			label = "art";
			reg = <0xff0000 0x010000>;
			read-only;
		};
Нужно сделать, чтобы образ собирался не под 8Мб, а под 16М

Код: Выделить всё

nano openwrt/target/linux/ath79/image/generic-tp-link.mk
в нем ищем блок:
define Device/tplink_tl-wdr3600-v1
$(Device/tplink-8mlzma)
Меняем на:
define Device/tplink_tl-wdr3600-v1
$(Device/tplink-16mlzma)
Теперь при сборке OpenWrt будет считать, что нужно собрать образ размером 16Мб
Запускаем конфигурацию

Код: Выделить всё

make menuconfig
1.png
Перемещение по пунктам осуществляется клавишами клавиатуры: вверх-вниз, пробел и esc.
Target Profile - (TP-Link TL-WDR3600 v1)
Выбираем нужные Вам пакеты:
3.png
4.png
5.png
6.png
7.png
Для поддержки L2TP нужно выбрать пакет xl2tpd
l2tp.png
l2tp_1.png
l2tp_2.png
l2tp_3.png
Так же необходимые протоколы pptp и тд выбираются здесь:
Network --->
<*> ppp
<*> ppp-mod-pppoe
<*> ppp-mod-pppol2tp
<*> ppp-mod-pptp

Ну и далее ориентируйтесь по своим потребностям, помните что место в роутере не резиновое и часто нужно уложиться в 4 мб., так что не переусердствуйте.
Поиск осуществляется по клавише / на английской раскладке
Klava.png
Когда все закончили, сохраняем нашу конфигурацию кнопкой <Save>!

Приступаем к сборке для 4х-ядерного процессора, для включения всех ядер, команда будет такой: (число ядер +1, вот оно и -j5 получается)

Код: Выделить всё

make -j5 V=-1
make.png
Ждем, через полчаса-час находим свою прошивку в каталоге ~/openwrt/bin/targets/ath79/generic/
Если перед сборкой выбран правильный target, но прошивка получается размером больше допустимого для размера
флеш вашего роутера - файлы *sysupgrade.bin и *factory.bin не будут созданы.

Прошиваем роутер новой прошивкой из под OpenWrt *sysupgrade.bin
Перегружаемся и радуемся df -h )

На всякий случяй прикладываю:
uboot16.zip
(82.85 КБ) 41 скачивание
Ответить