далее установка из исходников OpenWrt
Изначяльно wdr4300/wdr3600 идет чип ПЗУ памяти (внутренняя флешка) w25q64 на 8 мбайт в корпусе sop-8.
Будем менять на w25q128 на 16Мб.
Потребуется программатор например СН341А ну или любой другой который умеет шить SPI.
Также потребуется комп(ноут) с установленной Linux например c Ubuntu.
Для программирования под Linux к программатору есть прога flashrom.
Маршрутизатор wdr3600/4300 собраны на atheros 9xxx в терминах openWRT wdr4300 - архитектура ath79. Будем менять штатную 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И последним блоком №256 должен быть ART раздел, полученный нами на предыдущем шаге.
А первыми двумя блоками по 64кб, т.е. первые 128кб, первые 131 072 байта должен быть модифицированный загрузчик, который понимет 16Мб SPI flash. Загрузчик расположен по таким hex-адресам:
Код: Выделить всё
0x000000000000-0x000000020000 : "u-boot"Код: Выделить всё
dd if=wdr3600_orig_8mb_full.bin of=uboot-orig.bin bs=64k count=2Код: Выделить всё
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Код: Выделить всё
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а для 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Соответственно, будет ожидать 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Код: Выделить всё
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 Создаем клон репозитария:
Код: Выделить всё
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Меняем на: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;
};Код: Выделить всё
nano openwrt/target/linux/ath79/image/generic-tp-link.mkМеняем на:define Device/tplink_tl-wdr3600-v1
$(Device/tplink-8mlzma)
Теперь при сборке OpenWrt будет считать, что нужно собрать образ размером 16Мбdefine Device/tplink_tl-wdr3600-v1
$(Device/tplink-16mlzma)
Запускаем конфигурацию
Код: Выделить всё
make menuconfigTarget Profile - (TP-Link TL-WDR3600 v1)
Выбираем нужные Вам пакеты: Для поддержки L2TP нужно выбрать пакет xl2tpd Так же необходимые протоколы pptp и тд выбираются здесь:
Network --->
<*> ppp
<*> ppp-mod-pppoe
<*> ppp-mod-pppol2tp
<*> ppp-mod-pptp
Ну и далее ориентируйтесь по своим потребностям, помните что место в роутере не резиновое и часто нужно уложиться в 4 мб., так что не переусердствуйте.
Поиск осуществляется по клавише / на английской раскладке Когда все закончили, сохраняем нашу конфигурацию кнопкой <Save>!
Приступаем к сборке для 4х-ядерного процессора, для включения всех ядер, команда будет такой: (число ядер +1, вот оно и -j5 получается)
Код: Выделить всё
make -j5 V=-1Если перед сборкой выбран правильный target, но прошивка получается размером больше допустимого для размера
флеш вашего роутера - файлы *sysupgrade.bin и *factory.bin не будут созданы.
Прошиваем роутер новой прошивкой из под OpenWrt *sysupgrade.bin
Перегружаемся и радуемся df -h )
На всякий случяй прикладываю:

