Please add support for the linksys mr7350
root@OpenWrt:~# ubus call system board
{
"kernel": "6.6.80",
"hostname": "OpenWrt",
"system": "ARMv8 Processor rev 4",
"model": "Linksys MR7350",
"board_name": "linksys,mr7350",
"rootfs_type": "squashfs",
"release": {
"distribution": "OpenWrt",
"version": "SNAPSHOT",
"firmware_url": "https://downloads.openwrt.org/",
"revision": "r28926-9a7192c08e",
"target": "qualcommax/ipq60xx",
"description": "OpenWrt SNAPSHOT r28926-9a7192c08e",
"builddate": "1740912168"
}
}
root@OpenWrt:~# cat /tmp/sysinfo/board_name
linksys,mr7350
root@OpenWrt:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00180000 00020000 "0:sbl1"
mtd1: 00100000 00020000 "0:mibib"
mtd2: 00380000 00020000 "0:qsee"
mtd3: 00080000 00020000 "0:devcfg"
mtd4: 00080000 00020000 "0:rpm"
mtd5: 00080000 00020000 "0:cdt"
mtd6: 00080000 00020000 "0:appsblenv"
mtd7: 00180000 00020000 "0:appsbl"
mtd8: 00080000 00020000 "0:art"
mtd9: 00900000 00020000 "0:wififw"
mtd10: 00080000 00020000 "0:ethphyfw"
mtd11: 00080000 00020000 "u_env"
mtd12: 00040000 00020000 "s_env"
mtd13: 00040000 00020000 "devinfo"
mtd14: 00800000 00020000 "kernel"
mtd15: 04a00000 00020000 "rootfs"
mtd16: 00800000 00020000 "alt_kernel"
mtd17: 04a00000 00020000 "alt_rootfs"
mtd18: 00200000 00020000 "sysdiag"
mtd19: 04400000 00020000 "syscfg"
root@OpenWrt:~# fw_printenv
altkern=6680000
auto_recovery=yes
baudrate=115200
boot_part_ready=3
boot_ver=2.3.01
bootargs=init=/sbin/init rootfstype=squashfs ubi.mtd=alt_rootfs root=mtd:squashfs rootwait
bootcmd=i2c dev 0 && i2c probe && i2c mw 0x62 0x00 0x00 1 && i2c mw 0x62 0x01 0x05 1 && i2c mw 0x62 0x08 0x00 1 && if test $auto_recovery = no; then bootipq; elif test $boot_part = 1; then run bootpart1; else run bootpart2; fi
bootdelay=1
bootpart1=setenv bootargs $partbootargs && nand read $loadaddr $prikern $kernsize && bootm $loadaddr
bootpart2=setenv bootargs $partbootargs2 && nand read $loadaddr $altkern $kernsize && bootm $loadaddr
ethact=eth0
ethaddr=00:03:7f:ba:db:ad
fdt_high=0x48500000
fdtcontroladdr=4a477890
flash_type=2
flashimg=tftp $loadaddr $image && nand erase $prikern $imgsize && nand write $loadaddr $prikern $filesize
flashimg2=tftp $loadaddr $image && nand erase $altkern $imgsize && nand write $loadaddr $altkern $filesize
image=mr7350.img
imgsize=5200000
ipaddr=192.168.1.1
kernsize=800000
loadaddr=44000000
machid=8030200
mtddevname=fs
mtddevnum=0
mtdids=nand0=nand0
mtdparts=mtdparts=nand0:0x4e00000@0x1880000(fs),
netmask=255.255.255.0
partbootargs=init=/sbin/init rootfstype=squashfs ubi.mtd=rootfs root=mtd:squashfs rootwait
partbootargs2=init=/sbin/init rootfstype=squashfs ubi.mtd=alt_rootfs root=mtd:squashfs rootwait
prikern=1480000
serverip=192.168.1.254
soc_version_major=1
soc_version_minor=0
stderr=serial@78B1000
stdin=serial@78B1000
stdout=serial@78B1000
boot_part=1
root@OpenWrt:~#
Good morning, could you add support for the Linksys MR6350? There is already a version compatible with OpenWrt 24.10.0, Adding OpenWrt support for Linksys MR6350
alexxz
March 26, 2025, 2:08am
391
Hi,
I would like to request support for my dual-firmware device in the luci-app-advanced-reboot package. Below is the required information as per the guidelines:
Commit to add support:
https://git.openwrt.org/?p=openwrt/openwrt.git;a=commit;h=9c55866fada91c45679f75d03e6d13e1e0cd4202
~# ubus call system board
{
"kernel": "6.6.80",
"hostname": "OpenWrt",
"system": "ARMv8 Processor rev 4",
"model": "Linksys MR7350",
"board_name": "linksys,mr7350",
"rootfs_type": "squashfs",
"release": {
"distribution": "OpenWrt",
"version": "SNAPSHOT",
"firmware_url": "https://downloads.openwrt.org/",
"revision": "r28952-a2fd837e2e",
"target": "qualcommax/ipq60xx",
"description": "OpenWrt SNAPSHOT r28952-a2fd837e2e",
"builddate": "1741461963"
}
}
cat /tmp/sysinfo/board_name
linksys,mr7350
cat /proc/mtd
dev: size erasesize name
mtd0: 00180000 00020000 "0:sbl1"
mtd1: 00100000 00020000 "0:mibib"
mtd2: 00380000 00020000 "0:qsee"
mtd3: 00080000 00020000 "0:devcfg"
mtd4: 00080000 00020000 "0:rpm"
mtd5: 00080000 00020000 "0:cdt"
mtd6: 00080000 00020000 "0:appsblenv"
mtd7: 00180000 00020000 "0:appsbl"
mtd8: 00080000 00020000 "0:art"
mtd9: 00900000 00020000 "0:wififw"
mtd10: 00080000 00020000 "0:ethphyfw"
mtd11: 00080000 00020000 "u_env"
mtd12: 00040000 00020000 "s_env"
mtd13: 00040000 00020000 "devinfo"
mtd14: 00800000 00020000 "kernel"
mtd15: 04a00000 00020000 "rootfs"
mtd16: 00800000 00020000 "alt_kernel"
mtd17: 04a00000 00020000 "alt_rootfs"
mtd18: 00200000 00020000 "sysdiag"
mtd19: 04400000 00020000 "syscfg"
fw_printenv
altkern=6680000
auto_recovery=yes
baudrate=115200
boot_part_ready=3
boot_ver=2.3.01
bootargs=console=ttyMSM0,115200n8
bootcmd=i2c dev 0 && i2c probe && i2c mw 0x62 0x00 0x00 1 && i2c mw 0x62 0x01 0x05 1 && i2c mw 0x62 0x08 0x00 1 && if test $auto_recovery = no; then bootipq; elif test $boot_part = 1; then run bootpart1; else run bootpart2; fi
bootdelay=1
bootpart1=setenv bootargs $partbootargs && nand read $loadaddr $prikern $kernsize && bootm $loadaddr
bootpart2=setenv bootargs $partbootargs2 && nand read $loadaddr $altkern $kernsize && bootm $loadaddr
ethaddr=00:03:7f:ba:db:ad
fdt_high=0x48500000
fdtcontroladdr=4a477890
flash_type=2
flashimg=tftp $loadaddr $image && nand erase $prikern $imgsize && nand write $loadaddr $prikern $filesize
flashimg2=tftp $loadaddr $image && nand erase $altkern $imgsize && nand write $loadaddr $altkern $filesize
image=mr7350.img
imgsize=5200000
ipaddr=192.168.1.1
kernsize=800000
loadaddr=44000000
machid=8030200
mtddevname=fs
mtddevnum=0
mtdids=nand0=nand0
mtdparts=mtdparts=nand0:0x4e00000@0x1880000(fs),
netmask=255.255.255.0
partbootargs=init=/sbin/init rootfstype=squashfs ubi.mtd=rootfs root=mtd:squashfs rootwait
partbootargs2=init=/sbin/init rootfstype=squashfs ubi.mtd=alt_rootfs root=mtd:squashfs rootwait
prikern=1480000
serverip=192.168.1.254
soc_version_major=1
soc_version_minor=0
stderr=serial@78B1000
stdin=serial@78B1000
stdout=serial@78B1000
boot_part=1
Please let me know if any further details are needed. Thank you for your time and effort!
Best regards,
1 Like
The necessary changes have been submitted.
master
← 5p0ng3b0b:patch-1
opened 11:18PM - 02 Apr 25 UTC
Tested and verified working. Device has similar partition layout as other Linksy… s dual firmware routers.
- [ :white_check_mark:] Tested on: (Linksys MR7350, OpenWrt SNAPSHOT r29134, Firefox)
Hi,
I would like to request support for switch Zyxel gs1900-8 dual partition firmware in the luci-app-advanced-reboot package. Thanks a lot
root@OpenWrt:~# ubus call system board
{
"kernel": "6.6.73",
"hostname": "OpenWrt",
"system": "RTL8380",
"model": "Zyxel GS1900-8v1/v2 Switch",
"board_name": "zyxel,gs1900-8",
"rootfs_type": "squashfs",
"release": {
"distribution": "OpenWrt",
"version": "24.10.0",
"revision": "r28427-6df0e3d02a",
"target": "realtek/rtl838x",
"description": "OpenWrt 24.10.0 r28427-6df0e3d02a",
"builddate": "1738624177"
}
}
root@OpenWrt:~# cat /tmp/sysinfo/board_name
zyxel,gs1900-8
root@OpenWrt:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00010000 "u-boot"
mtd1: 00010000 00010000 "u-boot-env"
mtd2: 00010000 00010000 "u-boot-env2"
mtd3: 00100000 00010000 "jffs"
mtd4: 00100000 00010000 "jffs2"
mtd5: 00da0000 00010000 "firmware"
mtd6: 00380000 00010000 "kernel"
mtd7: 00a20000 00010000 "rootfs"
mtd8: 007c0000 00010000 "rootfs_data"
root@OpenWrt:~# fw_printenv
baudrate=115200
boardmodel=ZyXEL_GS1900_8
bootargs=console=ttyS0,115200 mem=64M quiet
bootcmd=cst fcTest; boota
bootdelay=0
ethact=rtl8380#0
ethaddr=98:0D:67:0A:6D:BA
ipaddr=192.168.1.1
netmask=255.255.255.0
serverip=192.168.1.111
stderr=serial
stdin=serial
stdout=serial
ps: I think that after installing openwrt it is no longer dual partition?
slh
April 4, 2025, 2:25am
394
Correct (for 24.10.x and up), so adding dual-boot support would be actively broken.
Hi. I have a request to have the Advanced Reboot option on a Zyxel GS1900-24E. Details below as requested on your README:
root@OpenWrt:~# ubus call system board
{
"kernel": "6.6.73",
"hostname": "OpenWrt",
"system": "RTL8382",
"model": "Zyxel GS1900-24E",
"board_name": "zyxel,gs1900-24e",
"rootfs_type": "squashfs",
"release": {
"distribution": "OpenWrt",
"version": "24.10.0",
"revision": "r28427-6df0e3d02a",
"target": "realtek/rtl838x",
"description": "OpenWrt 24.10.0 r28427-6df0e3d02a",
"builddate": "1738624177"
root@OpenWrt:~# cat /tmp/sysinfo/board_name
zyxel,gs1900-24e
root@OpenWrt:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00010000 "u-boot"
mtd1: 00010000 00010000 "u-boot-env"
mtd2: 00010000 00010000 "u-boot-env2"
mtd3: 00100000 00010000 "jffs"
mtd4: 00100000 00010000 "jffs2"
mtd5: 00da0000 00010000 "firmware"
mtd6: 00380000 00010000 "kernel"
mtd7: 00a20000 00010000 "rootfs"
mtd8: 007c0000 00010000 "rootfs_data"
root@OpenWrt:~# fw_printenv
resetdefault=0
dualfname0=openwrt-24.10.1-gs1900-24e-kernel.bin
mac_end=60:31:97:F7:F8:81
mac_start=60:31:97:F7:F8:69
sn=S173C14002197
dualfname1=runtime-GS1900-24Ev2-V2.90(AAHK.1).bix
boot_part=2
bootpartition=0
Kind regards
slh
April 19, 2025, 9:09pm
396
Same as above, there is only one firmware image with 24.10.x and up, so adding this for any member of the gs1900 series doesn't do any good.
root@home:~# ubus call system board
{
"kernel": "6.6.73",
"hostname": "home",
"system": "ARMv7 Processor rev 0 (v7l)",
"model": "ASUS RT-AC3100",
"board_name": "asus,rt-ac3100",
"rootfs_type": "squashfs",
"release": {
"distribution": "OpenWrt",
"version": "24.10.0",
"revision": "r28427-6df0e3d02a",
"target": "bcm53xx/generic",
"description": "OpenWrt 24.10.0 r28427-6df0e3d02a",
"builddate": "1738624177"
}
}
root@home:~# cat /tmp/sysinfo/board_name
asus,rt-ac3100
root@home:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00080000 00020000 "boot"
mtd1: 00180000 00020000 "nvram"
mtd2: 07e00000 00020000 "firmware"
mtd3: 003fffe4 00020000 "linux"
mtd4: 07a00000 00020000 "ubi"
root@home:~# fw_printenv
-ash: fw_printenv: not found
root@home:~#
Thanks for this program. Providing my travel router details.
Note this is for the Nand partition. I posted again with the NOR partition details.
GL-AR300M
root@Grimly:~# ubus call system board
{
"kernel": "6.6.86",
"hostname": "Grimly",
"system": "Qualcomm Atheros QCA9533 ver 2 rev 0",
"model": "GL.iNet GL-AR300M (NAND)",
"board_name": "glinet,gl-ar300m-nand",
"rootfs_type": "squashfs",
"release": {
"distribution": "OpenWrt",
"version": "24.10.1",
"revision": "r28597-0425664679",
"target": "ath79/nand",
"description": "OpenWrt 24.10.1 r28597-0425664679",
"builddate": "1744562312"
}
}
root@Grimly:~# cat /tmp/sysinfo/board_name
glinet,gl-ar300m-nand
root@Grimly:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00010000 "u-boot"
mtd1: 00010000 00010000 "u-boot-env"
mtd2: 00fa0000 00010000 "nor_firmware"
mtd3: 00010000 00010000 "art"
mtd4: 00400000 00020000 "kernel"
mtd5: 07c00000 00020000 "ubi"
root@Grimly:~# fw_printenv
lf=if ping $serverip; then tftp 0x80060000 $firmware_name && erase $firmware_addr +$filesize && cp.b $fileaddr $firmware_addr $filesize; if nand bad; then run dlf; fi; else echo ping $serverip failed; fi
rlf=if ping $serverip; then tftp $loadaddr $firmware_name && erase $firmware_addr +$filesize && cp.b $fileaddr $firmware_addr $filesize && echo OK!; else echo ERROR! Server not reachable!; fi
dlf=if ping 192.168.1.2; then echo ok; elif ping 192.168.1.2; then echo ok; elif ping 192.168.1.2; then echo ok; elif echo ping 192.168.1.2; then echo ok; elif echo ping 192.168.1.2; then echo ok; else echo ping finally failed; fi; tftp 0x81000000 openwrt-gl-ar300m.img && nand erase && nand write $fileaddr 0 $filesize
firmware_addr=0x9f050000
firmware_name=openwrt-gl-ar300m.bin
lu=if ping $serverip; then tftp $loadaddr $uboot_name && erase $uboot_addr +$uboot_size && cp.b $fileaddr $uboot_addr $filesize && echo OK!; else echo ERROR! Server not reachable!; fi
lc=tftp 0x80100000 config.bin && cp.b 0x9fff0000 0x81000000 0xffff && cp.b 0x80100000 0x81000000 0x40 && cp.b 0x80100000 0x81001002 0x06 && erase 0x9fff0000 +0xffff && cp.b 0x81000000 0x9fff0000 0xffff
uboot_addr=0x9f000000
uboot_size=0x00050000
uboot_name=uboot-gl-ar300m.bin
bootlimit=3
bootargs=board=ar300m console=ttyS0,115200 ubi.mtd=5,2048 root=/dev/mtdblock8 mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env),128k(reserved),64k(art);spi0.1:2m(kernel),20m(rootfs),106m(data),22m@0x0(firmware) rootfstype=squashfs,jffs2 noinitrd
bootcmd=nboot 0x81000000 0 0
bootdelay=2
baudrate=115200
ethaddr=0x00:0xaa:0xbb:0xcc:0xdd:0xee
ipaddr=192.168.1.1
serverip=192.168.1.2
loadaddr=0x80800000
stdin=serial
stdout=serial
stderr=serial
ethact=eth0
bootcount=0
Adding in details for AR300m NOR boot partition.
root@Grimly:~# ubus call system board
{
"kernel": "6.6.86",
"hostname": "Grimly",
"system": "Qualcomm Atheros QCA9533 ver 2 rev 0",
"model": "GL.iNet GL-AR300M (NOR)",
"board_name": "glinet,gl-ar300m-nor",
"rootfs_type": "squashfs",
"release": {
"distribution": "OpenWrt",
"version": "24.10.1",
"revision": "r28597-0425664679",
"target": "ath79/nand",
"description": "OpenWrt 24.10.1 r28597-0425664679",
"builddate": "1744562312"
}
}
root@Grimly:~# cat /tmp/sysinfo/board_name
glinet,gl-ar300m-nor
root@Grimly:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00010000 "u-boot"
mtd1: 00010000 00010000 "u-boot-env"
mtd2: 00fa0000 00010000 "firmware"
mtd3: 002d0000 00010000 "kernel"
mtd4: 00cd0000 00010000 "rootfs"
mtd5: 00830000 00010000 "rootfs_data"
mtd6: 00010000 00010000 "art"
mtd7: 00400000 00020000 "nand_kernel"
mtd8: 07c00000 00020000 "nand_ubi"
root@Grimly:~# fw_printenv
lf=if ping $serverip; then tftp 0x80060000 $firmware_name && erase $firmware_addr +$filesize && cp.b $fileaddr $firmware_addr $filesize; if nand bad; then run dlf; fi; else echo ping $serverip failed; fi
rlf=if ping $serverip; then tftp $loadaddr $firmware_name && erase $firmware_addr +$filesize && cp.b $fileaddr $firmware_addr $filesize && echo OK!; else echo ERROR! Server not reachable!; fi
dlf=if ping 192.168.1.2; then echo ok; elif ping 192.168.1.2; then echo ok; elif ping 192.168.1.2; then echo ok; elif echo ping 192.168.1.2; then echo ok; elif echo ping 192.168.1.2; then echo ok; else echo ping finally failed; fi; tftp 0x81000000 openwrt-gl-ar300m.img && nand erase && nand write $fileaddr 0 $filesize
firmware_addr=0x9f050000
firmware_name=openwrt-gl-ar300m.bin
lu=if ping $serverip; then tftp $loadaddr $uboot_name && erase $uboot_addr +$uboot_size && cp.b $fileaddr $uboot_addr $filesize && echo OK!; else echo ERROR! Server not reachable!; fi
lc=tftp 0x80100000 config.bin && cp.b 0x9fff0000 0x81000000 0xffff && cp.b 0x80100000 0x81000000 0x40 && cp.b 0x80100000 0x81001002 0x06 && erase 0x9fff0000 +0xffff && cp.b 0x81000000 0x9fff0000 0xffff
uboot_addr=0x9f000000
uboot_size=0x00050000
uboot_name=uboot-gl-ar300m.bin
bootlimit=3
bootargs=board=ar300m console=ttyS0,115200 ubi.mtd=5,2048 root=/dev/mtdblock8 mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env),128k(reserved),64k(art);spi0.1:2m(kernel),20m(rootfs),106m(data),22m@0x0(firmware) rootfstype=squashfs,jffs2 noinitrd
bootcmd=nboot 0x81000000 0 0
bootdelay=2
baudrate=115200
ethaddr=0x00:0xaa:0xbb:0xcc:0xdd:0xee
ipaddr=192.168.1.1
serverip=192.168.1.2
loadaddr=0x80800000
stdin=serial
stdout=serial
stderr=serial
ethact=eth0
bootcount=5
bng
May 20, 2025, 12:32pm
400
Hi! Here is the output for FortiGate 50E which has two ROM partitions mentioned in Bootloader:
FortiGate-50E (17:10-06.30.2016)
Ver:05000013
Serial number: XXXXXXXXXXXXXXX
CPU(00): 1600MHz
Total RAM: 2GB
Initializing boot device...
Initializing MAC... egiga0
Please wait for OS to boot, or press any key to display configuration menu
[C]: Configure TFTP parameters.
[R]: Review TFTP parameters.
[T]: Initiate TFTP firmware transfer.
[F]: Format boot device.
[I]: System information.
[B]: Boot with backup firmware and set as default.
[Q]: Quit menu and continue to boot.
[H]: Display this list of options.
root@FortiGate50E:~# ubus call system board
{
"kernel": "6.6.86",
"hostname": "FortiGate50E",
"system": "ARMv7 Processor rev 1 (v7l)",
"model": "Fortinet FortiGate 50E",
"board_name": "fortinet,fg-50e",
"rootfs_type": "squashfs",
"release": {
"distribution": "OpenWrt",
"version": "24.10.1",
"revision": "r28597-0425664679",
"target": "mvebu/cortexa9",
"description": "OpenWrt 24.10.1 r28597-0425664679",
"builddate": "1744562312"
}
}
root@FortiGate50E:~# cat /tmp/sysinfo/board_name
fortinet,fg-50e
aroot@FortiGate50E:~# cat /proc/mtd
dev: size erasesize name
mtd0: 001c0000 00010000 "u-boot"
mtd1: 00010000 00010000 "firmware-info"
mtd2: 00010000 00010000 "dtb"
mtd3: 00010000 00010000 "u-boot-env"
mtd4: 00010000 00010000 "board-info"
mtd5: 00600000 00010000 "kernel"
mtd6: 01800000 00010000 "rootfs"
mtd7: 01580000 00010000 "rootfs_data"
mtd8: 00600000 00010000 "kn2"
mtd9: 01800000 00010000 "rfs2"
mtd10: 01200000 00010000 "part1"
mtd11: 01200000 00010000 "part2"
mtd12: 01e00000 00010000 "config"
root@FortiGate50E:~# fw_printenv
Cannot parse config file '/etc/fw_env.config': No such file or directory
Failed to find NVMEM device
slh
May 20, 2025, 12:55pm
401
What do you expect to happen now?
You have the device on your desk, no one else does, so you need to find out how to toggle between the boot slots. Nothing you've shown above gives a hint about that. Judging from the commit adding support for this device to OpenWrt suggests that at least OpenWrt is hardcoded to only use the first partition set, totally ignoring the second - but the mechanism to switch between the a/b slots remains unclear, that's the question you'll have to sort out, before thinking about the web interface for this.
bng
May 20, 2025, 3:29pm
402
Well, good day to you too. As far as I see, you gave an instruction to post specific info to support thread and it wasn't clear from the instruction that I "need to find out how to toggle between the boot slots"
I'll keep that in mind before posting here, thank you
slh
May 20, 2025, 3:51pm
403
I didn't, as I'm not the maintainer of luci-app-advanced-reboot
The problem just is, luci-app-advanced-reboot is only -exclusively- a GUI, to add support, there needs to be some -known- way to
determine which firmware slot is the currently active one (well, OpenWrt can only be installed to the first one ('a'), the OEM firmware can't use any luci plugins, so that part is 'easy' here and can be considered a hard-coded 'a').
have a documented way to switch between 'a' and 'b' slots, so someone with the hardware needs to find out how to do that
(semi-) optionally have a way to read out the version numbers (e.g. kernel version) from the installed firmwares on 'a' and 'b'
While I can't speak for stangri, I'm pretty confident that he doesn't own a FortiGate 50E - and therefore can't do that part for you, even if he'd probably lend you a hand with the integration into luci-app-advanced-reboot (the JSON snippet, see https://github.com/openwrt/luci/tree/master/applications/luci-app-advanced-reboot/root/usr/share/advanced-reboot/devices ), you would have to determine that part.
Ideally someone (aka you) would also add a/b boot support (so the ability to boot from either 'a' or 'b', and to always upgrade 'the other' slot) for this device to OpenWrt as well, but that's orthogonal to supporting the device in luci-app-advanced-reboot.
FortiGate 50E: like @slh said, there doesn't seem to be support to determine/switch partitions from CLI, only from the bootmenu.
GL.iNet GL-AR300M: afaik there's no open source NAND support so OpenWrt always boots from NOR and there's nothing to switch to. If GL-Inet wants to implement dual-boot for their NAND/NOR devices, I'm sure they are more than capable of doing it in their firmware without my support.
ASUS RT-AC3100: based on the support commit and the partitions shown this doesn't seem to be a dual-partition device
ZyXEL GS1900-24EP: not clear to me if the dual-boot is supported under OpenWrt, I'll try to find time in June to investigate.
Linksys MR7350: @alexxz @5p0ng3b0b the PR to the OpenWrt luci repo is failing test formalities and thus cannot be merged there until fixed. It needs to be fixed or, alternatively, a PR can be made against my repo where I maintain the package and from there I can make a proper PR, crediting the author, to the OpenWrt repo.
PS. Kudos to @slh for their prompt replies in this thread during my absence.
The realtek targets currently only support installing OpenWrt to the 1st partition while keeping stock firmware in 2nd partition. The ZyXel GS1900 devices are now merging the two firmware partitions , effectively dropping dual boot
support with OpenWrt.
1 Like
slh
May 21, 2025, 12:04pm
406
Exactly, and that's already the case for 24.01 (and up), so while technically luci-app-advanced-reboot could have supported dual-boot in the past (<=23.05), current OpenWrt spans both slots with a single partition (so there is nothing bootable in the second slot anymore).
Background, these devices (all models of the gs1900 series) have a 16 MB spi-nor flash, the ZyXEL OEM firmware splits that into a/b slots (without fallback in case of failures though) - but 6976 KB simply is no longer sufficient for OpenWrt (24.10 extends that to 13952 KB by spilling over into the b-slot). Switching to the b-slot with 24.10+ installed would brick the device, requiring serial console access and fixing the boot-slot from the bootloader.
1 Like