Spectrum SAX1V1K: a silly little hack that helps

Spectrum SAX1V1K is an interesting device. It’s a rebranded (and redressed, meaning, put in a different case) Askey RT5010W (based mainly on Qualcomm componentry). The form factor is tower. There’s decent processing capacity (quad-core ARM Cortex-A53 processor running at 2.2 GHz), ample memory (2 GB), and good networking (2.5-gig WAN port, three Gigabit LAN ports, dual-band wireless with 4x4 AX working in each band). To make all this work in a tower form factor, the device has a fan (which, truth be told, is off most of the time); the intake openings are on the bottom of the device, the grill on the top is the exhaust.

In its stock form, the device runs proprietary Spectrum firmware (Spectrum is an ISP, so they put out firmware that ties the device both to their service and to their mobile app). Long story short, if there ever was a device that could benefit from OpenWrt conversion (good hardware + restrictive stock firmware), this one is it.

The conversion procedure is described in detail on the device page; briefly, it works like this:

  • You disassemble the device and connect a UART console cable to openings in the system board using breadboard wires
  • You make a console connection to the device at 115200 bps
  • You turn the device on and let it boot all the way
  • Once the boot sequence is complete, you log in as root using the device’s serial number as password (note that at this stage, the device is functional and can access the Internet if connected)
  • After logging in, you run a U-Boot configuration script by Lanchon (this is the stage to which the hack I am about to describe pertains)
  • After the script is finished, you reboot the device, interrupt the boot, and load OpenWrt kernel via TFTP
  • Once the device is running OpenWrt kernel, you execute a sysupgrade, which installs the complete firmware

Problems sometimes arise when you run the U-boot configuration script. The script requires that two partitions on the device’s eMMC module, /dev/mmcblk0p15 and /dev/mmcblk0p16, be identical. If they are not, you can copy one over the other, thus fixing the problem. Then, the script does slightly different things depending on the version of the stock firmware, determined based on the checksum of those partitions.

So far so good, but occasionally, the script encounters a version of stock firmware it cannot recognize, so it can’t proceed with re-configuration. The advice the script gives you is, make a dump of one of those partitions, post it on the support forum, and let those in the know help you. Yesterday, this happened to me. This was my fourth SAX1V1K device; first three were converted with zero issues. So here’s what I did rather than bother those in the know.

One. I made a dump of one of those partitions on another SAX1V1K:

dd if=/dev/mmcblk0p15 of=/tmp/15.img

It’s a single file about 2 MB in size (I called it 15.img). Note that I did it on a device that already ran OpenWrt; the two partitions in question appear to hold copies of U-boot and are not overwritten by OpenWrt (OpenWrt appears to use other partitions).

Two. I put that file on an HTTPS-accessible machine (for illustration purposes, let’s say the file ended up accessible as https://example.com/randomFiles/15.img).

Three. After logging in as root, but before running U-Boot setup, I did:

cd /tmp
wget https://example.com/randomFiles/15.img
dd if=15.img of=/dev/mmcblk0p15
dd if=15.img of=/dev/mmcblk0p16

I can’t remember if I had to reboot at this point (I may have rebooted reflexively even if I didn’t have to). One way or another, at that point, I had U-boot partitions that looked familiar to the re-configuration script, so it was able to run and do its work.

If you get stuck in this situation and don’t have a second device to fall back on, shoot me a private message; I’ll be happy to share my 15.img with you. Also, if there’s anywhere public I can put this file without it expiring, let me know, I’ll do that.

First of all I believe the procedure you’re pointing here is very risky as you can easily make mistakes and end up with a brick.

you at least need to add some form of check like md5sum of the file versus /dev/mmcblk0p15[6]

If you want to put the file in a public store that never expires the easiest is to create a github or gitlab repo holding the file and its checksum (md5 or sha1/256sum - depending what the oem firmware supports)

The install script checks the U-Boot partition SHAs.

i meant against this different device dump

this procedure you describe here is VERY RISKY and not recommended !!!

there is a reason why i took the trouble of checking in my installation script for:

  • mismatched bootloader versions
  • unknown bootloader versions

and the reason is simple: there is no way to safely and automatically fix this situation. i could have trivially implemented your procedure here in my script. and this could work in some cases, and could hard brick the device beyond fixing in others. read the exiting thread on this device and the script docs to understand why.

RECOMMENDATION:

  • do not follow these instructions
  • follow the installation script instructions instead

Thank you for the feedback!