Upgrading the Old Bootloader
Follow the procedure in this guide to upgrade an Omega2 module from the previous bootloader to the new, modern, u-boot-based bootloader.
Updating the bootloader has the potential to be a destructive action and can lead to a device becoming bricked or unusable.
Take care to ensure:
- The bootloader binary that will be flashed is not corrupted and has been confirmed to be working
- The Omega2 device remains powered on during the update
Onion is not responsible for any damage to devices.
How do I know if my Omega2 has the Old Bootloader?
The old and new bootloader will show up differently in the serial command line. We can use those differences to tell which version we're running.
Start by activating the bootloader command line:
Connect to the Omega2 command line through serial. Then power on the device and press the SW Reset button at the same time.
The Reset button on the Omega2 Eval Boards and Omega2 Docks is connected to the active-high FW_RST/GPIO38 pin. Pressing the reset button sends a digital-high signal to the FW_RST/GPIO38 pin.
Old Bootloader
If the serial command line shows a menu like the one below, the device is running the old version of the bootloader:
See the Legacy Onion Documentation for more information on the Legacy bootloader.
New Bootloader
If the serial command line prints messages mentioning U-Boot, U-Boot SPL and version numbers like 2025.04 or greater, then the device is already running the new bootloader. No need to take any further action!
U-Boot SPL 2025.04-ga92da3b468ea (Apr 23 2025 - 19:14:37 +0000)
Trying to boot from NOR
U-Boot 2025.04-ga92da3b468ea (Apr 23 2025 - 19:14:37 +0000)
CPU: MediaTek MT7688A ver:1 eco:2
Boot: DDR2, SPI-NOR 3-Byte Addr, CPU clock from XTAL
Clock: CPU: 580MHz, Bus: 193MHz, XTAL: 40MHz
Model: Onion Omega2+
DRAM: 128 MiB
Core: 52 devices, 13 uclasses, devicetree: separate
Loading Environment from SPIFlash... SF: Detected w25q256 with page size 256 Bytes, erase size 4 KiBB
OK
In: uartlite@c00
Out: uartlite@c00
Err: uartlite@c00
Initializing MT7688 GPIO system.
Net: eth0: eth@10110000
=>
Old Bootloader Upgrade Procedure
The upgrade procedure involves using the web recovery feature of the previous bootloader to flash the new bootloader to the Omega’s internal memory.
You will need access to the reset button (GPIO38), the serial console on UART0, and the Ethernet port to make use of the web recovery feature. Note that access to all of the above is provided on the Omega2 Eval Boards.
Step 1: Gather Requirements
Gather the requirements:
- The target Omega2 device with access to the following:
- serial command line
- ethernet port
- reset button (GPIO38)
- Note: Access to all of the above is provided on the Omega2 Eval Boards
- A host computer
- Ethernet Cable
- USB cable to connect to the Omega
Step 2: Computer Setup
Follow the steps below to setup the host computer for use with this guide.
Serial Command Line Drivers Installed
Follow the instructions in step 1 of the connecting to serial command line article to install the drivers required to use the serial command line.
Configure the Ethernet Network
Configure your computer’s ethernet network to manually set its IP address to 192.168.8.100
and subnet mask to 255.255.255.0
. By doing so, your computer will be able to communicate with the Omega over ethernet while it is in web recovery mode.
Look up "How to set static IP address" for the host computer operating system to find guides on making the required changes.
Step 3: Download the New Bootloader Binary
Use a browser to navigate to http://repo.onioniot.com/omega2/bootloader/v2025.04/
The u-boot images are named according to this syntax: onion-omega2p_u-boot-with-spl-[UBOOT-RELEASE]-[BUILD-DATE].bin
For example:
onion-omega2p_u-boot-with-spl-v2025.04-20250605.bin
Download the latest available u-boot image and place it in a new, empty directory. This new directory is where you will run the TFTP server.
The same image can be used for the Omega2 and Omega2+ variants. The new bootloader auto-detects flash and RAM size.
Step 4: Activate Web Recovery Mode
Connect the target Omega to the host computer with the ethernet cable. But do not power it on just yet!
Connect to the Omega2 command line through serial. Then power on the device and press the SW Reset button at the same time.
The Reset button on the Omega2 Eval Boards and Omega2 Docks is connected to the active-high FW_RST/GPIO38 pin. Pressing the reset button sends a digital-high signal to the FW_RST/GPIO38 pin.
This will activate the (old) bootloader and display a menu of options:
Activate Web Recovery Mode by pressing 0
, you should then see the following output:
Bringing Eth0 (10/100-M) up...
RT2880 ETH setup done.
HTTP server starting at 192.168.8.8 ...
HTTP server is up and running.
Step 5: Flash the New Bootloader
Open a browser on the host computer and navigate to http://192.168.8.8/uboot.html. It will display a page like this:
Next, press the Choose File button to select the bootloader binary downloaded in Step 3 above.
Updating the bootloader has the potential to be a destructive action and can lead to a device becoming bricked or unusable.
Take care to ensure:
- The bootloader binary that will be flashed is not corrupted and has been confirmed to be working
- The Omega2 device remains powered on during the update
Onion is not responsible for any damage to devices.
When you’re ready, press the Update! button. The serial command line will show messages like this:
Step 6: Update Complete
The update will take about 15 seconds, the device will restart when the update is complete.
If the process was successful, Omega will boot normally. The boot log will look like the following:
U-Boot SPL 2025.04-ga92da3b468ea (Apr 23 2025 - 19:14:37 +0000)
Trying to boot from NOR
U-Boot 2025.04-ga92da3b468ea (Apr 23 2025 - 19:14:37 +0000)
CPU: MediaTek MT7688A ver:1 eco:2
Boot: DDR2, SPI-NOR 3-Byte Addr, CPU clock from XTAL
Clock: CPU: 580MHz, Bus: 193MHz, XTAL: 40MHz
Model: Onion Omega2+
DRAM: 128 MiB
Core: 52 devices, 13 uclasses, devicetree: separate
Loading Environment from SPIFlash... SF: Detected w25q256 with page size 256 Bytes, erase size 4 KiBB
OK
In: uartlite@c00
Out: uartlite@c00
Err: uartlite@c00
Initializing MT7688 GPIO system.
Net: eth0: eth@10110000
SF: Detected w25q256 with page size 256 Bytes, erase size 4 KiB, total 32 MiB
Reading 4194304 byte(s) at offset 0x00000000
## Booting kernel from Legacy Image at 81800000 ...
Image Name: MIPS OpenWrt Linux-5.15.150
Image Type: MIPS Linux Kernel Image (lzma compressed)
Data Size: 2348656 Bytes = 2.2 MiB
Load Address: 80000000
Entry Point: 80000000
Verifying Checksum ... OK
Working FDT set to 0
Uncompressing Kernel Image to 80000000
[ 0.000000] Linux version 5.15.150 (builder@buildhost) (mipsel-openwrt-linux-musl-gcc (OpenWrt GC4
[ 0.000000] Board has DDR2
[ 0.000000] Analog PMU set to hw control
[ 0.000000] Digital PMU set to hw control
[ 0.000000] SoC Type: MediaTek MT7688 ver:1 eco:2
[ 0.000000] printk: bootconsole [early0] enabled
[ 0.000000] CPU0 revision is: 00019655 (MIPS 24KEc)
[ 0.000000] MIPS: machine is Onion Omega2+
...
What's Next?
Now that the new bootloader is installed on the device, see the rest of the guides in this section: