These are cheap decent filogic routers for OpenWrt. There is however a bit of trouble getting it to load due to the fact that they were made with at least two 16MB spi-nor flash chips that I know of, maybe more. I have two of them, one has a Fudan Microelectronics FM25Q128 and the other has a Boya Microelectronics BY25Q128AS. The Fudan will identify properly as a generic spi-nor chip and the initial flash works without an issue. The Boya on the other hand does not identify as generic and no driver for it is included in OpenWrt. This one will not flash successfully. I have made a driver patch for the Boya chip. There is one for 24.10 and another for snapshot as the syntax is different.
The other issue is that the current sysupgrade.bin images will work fine for the initial flash for the Fudan (NOT the Boya due to the driver issue) using the original instructions but cannot be used for sysupgrades afterwards. I have made a new filogic.mk entry for this model that will now make a factory.bin file that can be used for the initial flash as well as a sysupgrade.bin file that can be used for subsequent upgrades. I have tested this on both chips using snapshot and 24.10 successfully.
Here is my Google Drive folder with the necessary files.
Also my Github (only for snapshot)
Updated instructions:
ssh Installation Method
--------------------------
1. Connect the PC to one of the lan ports
2. Navigate to http://192.168.10.1
3. Log into the Wavlink WebGUI. The default password is admin.
Navigate to http://192.168.10.1/html/upgrade.html (skip all setup)
4. Use the WebGUI to upgrade the firmware to
WAVLINK_WN586X3-A_M86X3A_V240113_WO-GDBYFM-modified.bin
download from:
https://github.com/themaverickdm/firmware-misc/tree/main/wavlink/wl-wn586x3
(also included in my Google Drive folder)
5. Wait about 5 minutes (seriously!!), log into the router
using ssh root@192.168.10.1 with admin123 as the password
6. scp the openwrt-mediatek-filogic-wavlink_wl-wn586x3-squashfs-factory.bin
file onto the router, under /tmp
7. Using ssh flash the openwrt image file like so:
mtd -r write \
/tmp/openwrt-mediatek-filogic-wavlink_wl-wn586x3-squashfs-factory.bin \
firmware
8. Wait about 5 minutes, log into the router at http://192.168.1.1 (no password)
9. Use Luci (or CLI) to upgrade using the sysupgrade.bin file,
this will complete the install process
Updated filogic.mk entry
define Device/wavlink_wl-wn586x3
DEVICE_VENDOR := WAVLINK
DEVICE_MODEL := WL-WN586X3
DEVICE_DTS := mt7981b-wavlink-wl-wn586x3
DEVICE_DTS_DIR := ../dts
DEVICE_DTS_LOADADDR := 0x47000000
DEVICE_PACKAGES := kmod-mt7915e kmod-mt7981-firmware mt7981-wo-firmware
IMAGE_SIZE := 14336k
IMAGES := factory.bin sysupgrade.bin
KERNEL := kernel-bin | lzma | \
fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
IMAGE/factory.bin := $$(IMAGE/sysupgrade.bin)
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
endef
TARGET_DEVICES += wavlink_wl-wn586x3
I have also made changes to the dts file for this model (this is for snapshot, the version for 24.10 is in my Google Drive)
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/dts-v1/;
#include <dt-bindings/pinctrl/mt65xx.h>
#include "mt7981b.dtsi"
/ {
model = "WAVLINK WL-WN586X3";
compatible = "wavlink,wl-wn586x3", "mediatek,mt7981";
aliases {
label-mac-device = &wifi;
led-boot = &led_status_blue;
led-failsafe = &led_status_blue;
led-running = &led_status_blue;
led-upgrade = &led_status_blue;
serial0 = &uart0;
};
chosen {
stdout-path = "serial0:115200n8";
};
gpio-keys {
compatible = "gpio-keys";
button-0 {
label = "reset";
linux,code = <KEY_RESTART>;
gpios = <&pio 11 GPIO_ACTIVE_LOW>;
};
};
leds {
compatible = "gpio-leds";
led-0 {
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_WAN;
gpios = <&pio 5 GPIO_ACTIVE_LOW>;
};
led-1 {
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_WLAN;
gpios = <&pio 9 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy1tpt";
};
led_status_blue: led-2 {
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_STATUS;
gpios = <&pio 10 GPIO_ACTIVE_LOW>;
};
led-3 {
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_LAN;
function-enumerator = <1>;
gpios = <&pio 12 GPIO_ACTIVE_LOW>;
};
led-4 {
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_LAN;
function-enumerator = <2>;
gpios = <&pio 13 GPIO_ACTIVE_LOW>;
};
};
};
&uart0 {
status = "okay";
};
&watchdog {
status = "okay";
};
ð {
pinctrl-names = "default";
pinctrl-0 = <&mdio_pins>;
status = "okay";
gmac0: mac@0 {
compatible = "mediatek,eth-mac";
reg = <0>;
phy-mode = "2500base-x";
nvmem-cells = <&macaddr_hw_44e 0>;
nvmem-cell-names = "mac-address";
fixed-link {
speed = <2500>;
full-duplex;
pause;
};
};
gmac1: mac@1 {
compatible = "mediatek,eth-mac";
reg = <1>;
phy-mode = "gmii";
phy-handle = <&int_gbe_phy>;
nvmem-cells = <&macaddr_hw_44e 1>;
nvmem-cell-names = "mac-address";
};
};
&mdio_bus {
switch: switch@1f {
compatible = "mediatek,mt7531";
reg = <31>;
reset-gpios = <&pio 39 GPIO_ACTIVE_HIGH>;
};
};
&spi0 {
status = "disabled";
};
&spi2 {
pinctrl-names = "default";
pinctrl-0 = <&spi2_flash_pins>;
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <50000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "bl2";
reg = <0x00000 0x40000>;
read-only;
};
partition@40000 {
label = "u-boot-env";
reg = <0x40000 0x10000>;
read-only;
};
factory: partition@50000 {
label = "factory";
reg = <0x50000 0xb0000>;
read-only;
nvmem-layout {
compatible = "fixed-layout";
#address-cells = <1>;
#size-cells = <1>;
eeprom_factory_0: eeprom@0 {
reg = <0x0 0x1000>;
};
};
};
partition@100000 {
label = "fip";
reg = <0x100000 0x80000>;
read-only;
};
partition@f0000 {
label = "firmware";
reg = <0x180000 0xe00000>;
};
partition@f80000 {
label = "hw";
reg = <0xf80000 0x80000>;
nvmem-layout {
compatible = "fixed-layout";
#address-cells = <1>;
#size-cells = <1>;
macaddr_hw_44e: macaddr@44e {
compatible = "mac-base";
reg = <0x44e 0x11>;
#nvmem-cell-cells = <1>;
};
};
};
};
};
};
&pio {
spi0_flash_pins: spi0-pins {
mux {
function = "spi";
groups = "spi0", "spi0_wp_hold";
};
};
spi2_flash_pins: spi2-pins {
mux {
function = "spi";
groups = "spi2", "spi2_wp_hold";
};
conf-pu {
pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
drive-strength = <MTK_DRIVE_8mA>;
bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
};
conf-pd {
pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
drive-strength = <MTK_DRIVE_8mA>;
bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
};
};
};
&switch {
ports {
#address-cells = <1>;
#size-cells = <0>;
port@1 {
reg = <1>;
label = "lan2";
};
port@2 {
reg = <2>;
label = "lan1";
};
port@6 {
reg = <6>;
ethernet = <&gmac0>;
phy-mode = "2500base-x";
fixed-link {
speed = <2500>;
full-duplex;
pause;
};
};
};
};
&wifi {
status = "okay";
nvmem-cells = <&eeprom_factory_0>;
nvmem-cell-names = "eeprom";
};
Hopefully this can help others that run into these issues trying to get OpenWrt running on this router.