MR80X v4: sysupgrade succeeds but device fails to boot (missing 'uboot' UBI volume)

Hi everyone,

I would like to share my experience trying to get OpenWrt running on a Mercusys MR80X v4.0 (BR), using firmware intended for the v3 hardware, since both versions appear to share the same SoC (MediaTek MT7981) and very similar hardware.


:magnifying_glass_tilted_left: Device details

  • Model: Mercusys MR80X v4.0 (Brazil version)
  • SoC: MediaTek MT7981
  • Flash: SPI-NAND (128MB)
  • Bootloader: Vendor U-Boot (custom Mercusys implementation)
  • Storage layout: UBI with dual firmware partitions (ubi0 / ubi1)

:gear: Initial assumption

Based on hardware inspection, v4.0 seems nearly identical to v3.0 (same SoC, memory, etc.), so I attempted to use OpenWrt images built for MR80X v3.


:rocket: What I managed to do

:check_mark: Booting OpenWrt (initramfs)

Using serial console + TFTP, I was able to:

tftpboot 0x46000000 openwrt-initramfs.bin
bootm 0x46000000

:backhand_index_pointing_right: This worked successfully.
OpenWrt booted and was fully functional (network, Wi-Fi, LuCI, etc.).


:check_mark: Flashing via LuCI / sysupgrade

From the initramfs environment, I uploaded a sysupgrade image and ran:

sysupgrade -F -n /tmp/fw.bin

The upgrade process completed successfully, including:

  • UBI formatting
  • Creation of volumes:
    • kernel
    • rootfs
    • rootfs_data

No errors during flashing.


:cross_mark: Main problem

After reboot, the device does not boot OpenWrt.

Instead, serial output shows:

Cannot find volume 'uboot'
Cannot find volume 'rootfs'
ubi_boot_image: try two times failed
Start web server.

The device then enters recovery mode (web server at 192.168.1.1).


:brain: Root cause (analysis)

The issue appears to be bootloader incompatibility, not flashing failure.

The Mercusys bootloader:

  • Uses a custom UBI layout
  • Expects specific volume names (e.g. uboot)
  • Does NOT follow standard OpenWrt UBI layout

OpenWrt creates:

  • kernel
  • rootfs
  • rootfs_data

But the bootloader tries to read:

volume 'uboot'

→ which does not exist in standard OpenWrt installations.


:repeat_button: Dual firmware behavior

The bootloader cycles between:

  • ubi1
  • ubi0

Trying both slots, but failing in both because the expected volume layout is missing.


:wrench: Attempts to fix

Tried:

  • Forcing boot partition (tp_boot_idx)
  • Manually creating UBI volumes via U-Boot:
ubi create uboot
ubi write ...
  • Direct NAND flashing (nand write)
  • Rebuilding UBI manually

:backhand_index_pointing_right: None of these resulted in a stable boot.


:chart_decreasing: Observations

  • OpenWrt does install correctly
  • UBI is valid and clean
  • Kernel + rootfs are present and written
  • But bootloader refuses to boot due to layout mismatch

:light_bulb: Conclusion

This device likely requires one of the following:

  1. Proper OpenWrt support for MR80X v4
  • Including compatible UBI layout and partition definitions
  1. Bootloader modification or replacement
  • To support standard OpenWrt layout
  1. Custom image with vendor-compatible UBI volume names
  • Possibly including a uboot volume or adjusted structure

:red_question_mark: Questions

  • Has anyone successfully ported OpenWrt to MR80X v4?
  • Is there a known way to adapt OpenWrt images to Mercusys UBI layout?
  • Any documentation on this bootloader behavior?

:pushpin: Final note

Even though the hardware is nearly identical to v3, the bootloader behavior makes it incompatible out-of-the-box.

OpenWrt runs perfectly via initramfs, but persistent installation fails due to boot expectations.


Thanks in advance for any insights :+1: