Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save evanesoteric/69663bb4cd3558ce5b3bc38ea343b979 to your computer and use it in GitHub Desktop.

Select an option

Save evanesoteric/69663bb4cd3558ce5b3bc38ea343b979 to your computer and use it in GitHub Desktop.
OpenWRT on ESPRESSObin Ultra

OpenWRT supports the ESPRESSObin Ultra since 2020. Official builds are available.

In thins gist I want to explain how to install the image onto the board via a USB thumb drive.

All you need

  • ESPRESSObin Ultra
  • 12V 2A DC or PoE power supply
  • USB A to USB Micro-B cable
  • wired internet connection

Steps

  1. Download the most recent version of the sd card image, decompress it and write it to the USB drive (in my case /dev/sdb/).
cd $(mktemp -d)
wget http://downloads.openwrt.org/snapshots/targets/mvebu/cortexa53/openwrt-mvebu-cortexa53-globalscale_espressobin-ultra-squashfs-sdcard.img.gz
gunzip openwrt-mvebu-cortexa53-globalscale_espressobin-ultra-squashfs-sdcard.img.gz
sudo dd if=openwrt-mvebu-cortexa53-globalscale_espressobin-ultra-squashfs-sdcard.img status=progress obs=64k oflag=direct of=/dev/sdb
  1. Plug the USB drive into the ESPRESSObin
  2. Connect your computer with it via the USB cable
  3. Connect the ESPRESSObin to a wired network with internet access via the WAN port
  4. Power it on.
# on my computer the serial connection appears as /dev/ttyUSB0
screen -L /dev/ttyUSB0 115200
# hiter enter repeatedly to drop into bootloader shell (Marvell>>)
# start usb subsystem
usb start
# check contents of kernel partition
ext4ls usb 0:1
  <DIR>       4096 .
  <DIR>       4096 ..
  <DIR>       4096 lost+found
          10268680 Image
             12224 armada-3720-espressobin-ultra.dtb
               973 boot.scr
# set file names
setenv image_name Image
setenv fdt_name armada-3720-espressobin-ultra.dtb
# save file names to non-volatile storage
saveenv
# load files
ext4load usb 0:1 $kernel_addr_r $image_name
ext4load usb 0:1 $fdt_addr_r $fdt_name
# set boot argument line
setenv bootargs $console root=/dev/sda2 rw rootwait
# boot this kernel
booti $kernel_addr_r - $fdt_addr_r
# hiter enter repeatedly to drop into console
# download and decompress image again, but on the ESPRESSObin
cd $(mktemp -d)
wget http://downloads.openwrt.org/snapshots/targets/mvebu/cortexa53/openwrt-mvebu-cortexa53-globalscale_espressobin-ultra-squashfs-sdcard.img.gz
gunzip openwrt-mvebu-cortexa53-globalscale_espressobin-ultra-squashfs-sdcard.img.gz
# write the image to the eMMC
dd if=./openwrt-mvebu-cortexa53-globalscale_espressobin-ultra-squashfs-sdcard.img of=/dev/mmcblk0 && sync
# shut down
poweroff
  1. Remove the USB drive
  2. Turn ESPRESSObin off and on again
@SJLC
Copy link

SJLC commented Aug 19, 2025

Initially boot got stuck waiting for root after step 7:

[    2.311395] Waiting for root device PARTUUID=89708921-01...

This was because the bootcmd set root to a specific partition UID that no longer exists after reflashing the eMMC

printenv bootcmd
bootcmd=mmc dev 0; ext4load mmc 0:1 $kernel_addr_r $image_name;ext4load mmc 0:1 $fdt_addr_r $fdt_name;setenv bootargs $console root=PARTUUID=89708921-01 rw rootwait net.ifnames=0 biosdevname=0; booti $kernel_addr_r - $fdt_addr_r

Try adding following step to get the new partition to boot:

  1. update u-boot env to boot by device name instead of partition UID like from factory
# again hit enter repeatedly to drop into bootloader shell (Marvell>>)

setenv bootargs $console root=/dev/mmcblk0p2 rw rootwait net.ifnames=0 biosdevname=0
setenv bootcmd_factory $bootcmd
setenv bootcmd mmc dev 0\; ext4load mmc 0:1 \$kernel_addr_r \$image_name\; ext4load mmc 0:1 \$fdt_addr_r \$fdt_name\; booti \$kernel_addr_r - \$fdt_addr_r
saveenv

# try with the new bootargs and bootcmd
boot

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment