[OpenWRT]: Сборка прошивки для маршрутизатора Acorp WR-300NU

Feb 03, 2020 17:11


Информация изложенная здесь, скорее всего не имеет практической ценности из-за морального устаревания аппаратной платформы маршрутизатора.
Изменение программной и аппаратной части маршрутизатора вы производите исключительно на свой страх и риск!

Итак, имеем малораспространенный, но весьма неплохой маршрутизатор для своего времени - Acorp WR-300NU.










От него требуется:
  1. работа проводным подключением, что обычно обычно реализуется при помощи DHCP/PPPоE/L2TP/PPtP-клиента;
  2. резервирование данного подключения через 3G-соединение, потребует поддержки 3G/4G модемов и П.О., проверяющее работоспособность того или иного подключения;
  3. VPN-соединение с внешним сервером и соответствующая маршрутизация до удаленных сетей;
  4. возможность управления при помощи SMS.

Аппаратная часть маршрутизатора:
1. SoC - Ralink RT3052 id:1 rev:3 (384Mhz)
Datasheet: https://yadi.sk/i/MxSSJA2Pt9Ppkw
Поскольку SoC данного семейства сильно нагреваются при работе - требуется установка дополнительного радиатора, что и было произведено.
2. Memory
2.1 EtronTech EM63A165TS-6G (32MB) - Original
Datasheet: https://yadi.sk/i/yEN1X-3kJpYAoQ
2.2 ESMT M12L2561616A-6T (32Mb) - Hardware mod.
Datasheet: https://yadi.sk/i/sdMc6JVRhrMBDg
Максимальный объем оперативной памяти, поддерживаемый SoC, согласно datasheet  - 64MB.
На данном маршрутизаторе объем оперативной памяти может быть увеличен до максимального значения - на плате есть площадка (см. фото, модификации выделены красным) для установки еще одного модуля, аналогичного указанному.
Такая аппаратная доработка была произведена, путем установки вот такого модуля 2.2 (выпаян из неработающего маршрутизатора-"донора").
3. Storage - FLASH Macronix MX29LV640EBTI-70G (8MB)
Datasheet: https://yadi.sk/d/o_3PBL4hmQFheA
Максимальный объем flash-памяти согласно все тому же SoC datasheet - 32MB.
Аппаратной доработка возможна - кроме самого модуля потребуется, программатор и flash full-dump.
4. Wireless - Ralink RT3052 802.11bgn 2T2R (две внешние несъемные антенны)

5. Ethernet - Ralink RT3052 switch-chip (5 портов x 10/100 FastEthernet - нумерация портов выполнена справа налево)

6. USB - Ralink RT3052 OTG (1 порт x USB 2.0)

7. LEDs: WDS / WAN / SYS / PWR / LAN1 - LAN4 / WRLS
Из данных светодиодов:
  1. управлять можно только одним - WPS (GPIO 14);
  2. PWR - питается от цепи питания устройства;
  3. SYS - параллельно с WAN, состояние которого целиком контролируется switch-chip-ом;
  4. еще один светодиод, состоянием которого можно управлять - может быть распаян на плате, в исходных кодах и на плате он помечен как SEC (GPIO 13).


8. Buttons - 1 x RESET
Кнопка WPS - по логике должна присутствовать, но ее нет.

9. UART - может быть распаян на плате, контакты начиная с того, что в квадратике: 3.3V/RX/TX/GND.
Я припаял пины для подключения MAX3232 UART TTL - RS232 конвертера.

Программная часть:
1. Оригинальной прошивкой маршрутизатора является Wive-NG-RTNL
Сама по себе прошивка построена на сильно доработанном Ralink SDK, но не имеет поддержки шифрования (кроме MPPE-128) при организации туннелей и работы с SMS. Так же необходимо отметить, что разработка прошивки более не осуществляется, но исходный код прошивки открыт и недостающий функционал скорее всего можно добавить.
Ссылки на оригинальные прошивки:
[1] https://sourceforge.net/projects/wive-ng/files/wive-ng-rtnl/Wive_WR-300NU-RT3052-2T2R-USB.5.3.14.RU.03112016.bin.zip/download ;
[2] https://yadi.sk/d/nnGhr_dLUAU5Aw (копия на всякий случай).

2. Все необходимое мне есть в прошивке OpenWRT:
  1. поддержка различных видов проводного и 3G/4G реализована в виде модулей ядра;
  2. резервирование подключений в пакете mwan3;
  3. работа с SMS - smstools3.

Но, как всегда есть и ряд проблем:
  1. устройства с 4MB flash / 32MB memory практически не поддерживаются разработчиками;
  2. нет поддержки данной модели маршрутизатора.

Аппаратно, первую проблему мы обошли, добавив в маршрутизатор модуль памяти, но для ее обнаружения в OpenWRT потребуетcя обновление загрузчика uBoot устройства, поскольку именно в его конфигурации задается объем памяти доступной устройству.
Правильным было бы собрать собственный загрузчик, для данного конкретного устройства - но я просто посекторно скопировал его из ранее упоминавшегося Asus RT-N13U.

Скачать u-Boot от Asus RT-N13U, можно по ссылке - прошить новый загрузчик в маршрутизатор с уже установленной OpenWRT, можно установив модуль kmod-mtd-write и запустив его с опцией i_want_a_brick=1, что прямо говорит об опасности проводимых действий.

# Windows system (PuTTY / pscp utility) - uBoot flashing
# Copy uBoot image to router
pscp -scp uboot-asus.bin root@192.168.1.1:/tmp
# Target device (router):
# Install package & load module
opkg update
opkg install kmod-mtd-write
insmod mtd-rw i_want_a_brick=1
mtd unlock u-boot
mtd write uboot-asus.bin u-boot

Для решения второй - придется собрать собственную прошивку из исходных кодов, добавив поддержку устройства.

3. Процесс добавления нового устройства /сборка прошивки из исходных кодов описаны в OpenWRT Developer Guide.
Ссылки по теме:
[1] https://oldwiki.archive.openwrt.org/doc/howto/build
[2] https://openwrt.su/sborka/sborka-svoej-proshivki-lede-iz-iskhodnikov
[3] https://oldwiki.archive.openwrt.org/doc/howto/build

После изучения документации, становится понятно, что:
3.0 нужна машина с Linux - виртуальная или реальная для сборки прошивки (я использую VPS);

3.1 необходимо скачать исходники для сборки прошивки (в моем случае это 17.01.7, почему напишу позже);
Для этого заходим по ссылке, выбираем релиз, затем tree, затем snapshot - скачиваем архив и распаковывем в домашней директории. Скорее всего это можно сделать и напрямую через git на build system, но я не настолько крут.

3.2 самым важным моментом при добавлении нового устройства является его правильное описание в DTS.
Это можно и, наверное, нужно сделать тщательно изучив аппаратную часть маршрутизатора и прочитав документацию по Device Tree, но, как указано в примере выше, можно отредактировать конфигурацию аппаратного клона устройства поддержка которых уже есть.
Такими устройствами являются Dlink DIR-620 A1 и после произведенных "железных" доработок, все тот же Asus RT-N13U.
Мои архивы с измененными, относительно основного дерева исходных файлов релиза, можно скачать тут:
[1] 17.01.7 https://yadi.sk/d/8G5dWEgtVhKufA
[2] 18.06.6 https://yadi.sk/d/8bqRt20gtLqrjw

Список файлов в которые внесены изменения:

target/linux/ramips/base-files/lib/upgrade/platform.sh
target/linux/ramips/base-files/lib/ramips.sh
target/linux/ramips/base-files/etc/board.d/01_leds
target/linux/ramips/base-files/etc/board.d/02_network
target/linux/ramips/base-files/etc/diag.sh
target/linux/ramips/image/rt305x.mk
target/linux/ramips/dts/WR-300NU.dts

3.3 Собираем прошивку после проделанных изменений, примерно следующим образом:

# Linux system - image building
# Unpack sources
tar -xzf archive/openwrt-v17.01.7.tar.gz
# Apply device support files
tar -xzf ../images/openwrt-v17.01.7/acorp_wr-300nu-support.tar.gz
# Check if is all ok
grep -lir wr-300nu target/linux/ramips/
# Command output
target/linux/ramips/base-files/lib/upgrade/platform.sh
target/linux/ramips/base-files/lib/ramips.sh
target/linux/ramips/base-files/etc/board.d/01_leds
target/linux/ramips/base-files/etc/board.d/02_network
target/linux/ramips/base-files/etc/diag.sh
target/linux/ramips/image/rt305x.mk
target/linux/ramips/dts/WR-300NU.dts
# Select build platform & target (Mediatek MIPS / RT305x / Acorp WR-300NU)
make menuconfig
# Generate default target config
make defconfig
# Make build tools
make tools/install
# Make build toolchain
make toolchain/install
# Customize default image - mark nesseccery packets with '*' (kernel modules / wireguard / mwan3)
make menuconfig
# Build image
make -j4 V=S

Если все вышеописанное внезапно прошло удачно, то в каталоге bin/targets/ramips/rt305x будут собранные образы.

4. Прошивка собрана - время залить ее в устройство.
О том как сменить прошвку Wive-NG-RTNL можно прочитать по ссылке.
После перепрошивки обязательно необходимо сбросить устройство при помощи кнопки Reset и в случае аппаратных доработок обновить uBoot, как было показано выше.

# Windows system (PuTTY / pscp utility) - image flashing
# Copy sysupgrade image to router
# Wive-NG-RTNL default login / password: Admin / Admin
pscp -scp lede-ramips-rt305x-wr-300nu-squashfs-sysupgrade.bin Admin@192.168.1.1:/tmp/sysupgrade.bin
# Target device (router - Wive-NG-RTNL firmware):
cd /tmp
mtd_write erase Kernel_RootFS
mtd_write write sysupgrade.bin Kernel_RootFS
# Reboot device once, than reset it with RESET button OR:
firstboot
mtd erase rootfs_data

Вернуть заводскую прошивку можно, аналогичным образом:

# Windows system (PuTTY / pscp utility) - image reverting
# Copy sysupgrade image to router
# OpenWRt default login / password: root / no password
pscp -scp Wive_WR-300NU-RT3052-2T2R-USB.5.3.14.RU.03112016.bin root@192.168.1.1:/tmp/wive-ng.bin
# Target device (router - OpenWRT firmware):
cd /tmp
mtd -r write wive-ng.bin firmware
# Reboot device once, than reset it with RESET button OR:
fs fullreset

6. Ссылка на собранные, для описанных здесь задач, образы для тех, кто дочитал и не уснул:
[1] OpenWRT 17.01.7 Acorp-WR300NU https://yadi.sk/d/mb6oQ52WmC7znA

И о грустном (как будто сверху все было веселым, да):

- при использовании самосборных прошивок вы НЕ сможете установить все что имеет в зависимостях ядро (модули / утилиты / приложения) из официальных репозиториев и вам придется собрать их самостоятельно;
- в версиях OpenWRT выше 17.01.7 (и в 18.06.x, и в 19.07.x), на момент написания не работает USB - решения проблемы нет:
https://bugs.openwrt.org/index.php?do=details&task_id=2473
https://forum.openwrt.org/t/dir-620-a1-18-06-usb-not-working/41988
- в версии 17.01.7 "старое" ядро 4.4.x, т.е отсутствует поддержка software fastpath, что означает значительную потерю производительности.

Вот и все остается только настроить, то что было необходимо в первоначальной задаче и, в очередной раз, заняться тестированием.

[UPD#1 07/02/2020]

Примерные тесты производительности устройства на 17.01.7, на грани возникновения потерь пакетов (CPU Idle ~12-15%):
Проводное соединение:
NAT: ~60Mbit/s
Wireguard: ~12Mbit/s
Беспроводное соедиение (N-only TX/RX = MSC6)
NAT: ~40Mbit/s
Wireguard: ~12Mbit/s

С уменьшением размера пакета производительность драматически стремится к нулю.

[UPD#1 07/06/2020]
Проблема с USB решена, стало быть - собрал новый образ:
https://git.openwrt.org/?p=openwrt/openwrt.git;a=commitdiff;h=ab841b4393a4077a5819da1da040ab9a89e3b69d
[2] OpenWrt 19.07.3 Acorp-WR300NU https://yadi.sk/d/jDgQoJvWGoQF_g

networks, acorp, shell, openwrt, smstools, diy

Previous post Next post
Up