[HOWTO] Installing OpenWrt on Cisco Meraki MX60

This HOWTO is intended for the relatively new users who have some experience with general computing and system administration but are not (yet) comfortable with flashing firmware and need some friendly handholding to get through the process. Some potentially necessary general education will be provided along the way.

This HOWTO is based on the official OpenWrt installation instructions for the MX60:

https://openwrt.org/toh/meraki/mx60

but expands on some tricky points.

The obligatory plug: if after reading this you conclude that this is too much work, shoot me a private message; I might have a reflashed MX60 looking for a new home. :slight_smile:

Introduction

Cisco sold Meraki MX60 as a “cloud-managed security appliance”. It comes in two flavors; MX60 proper has one WAN port and four LAN ports (all ports are Gigabit), and MX60W is basically MX60 plus wireless networking powered by Qualcomm Atheros AR93xx adapter. The MX60 has passed end of sales in October 2015 and is nearing its end of support slated for October 2022 (translation: look for those things on eBay; they ought to come cheap).

The MX60 is implemented in a desktop form factor and has a good-looking (nay, MacMini-level gorgeous) all-metal case, silver top and black bottom. Power requirements (in case your unit didn’t come with a power supply) are 12 V / 2.5 A over a 5.5 mm barrel plug.

The unit I had on hand was a MX60W sporting a PowerPC CPU (OpenWrt identifies it as APM821xx), 512 MB of RAM, and 1 GB of onboard Flash storage. Purchase price (eBay) was a little over USD 30 including shipping. No power supply, but I generally keep on hand a few 12 V / 3 A units, which can be had, courtesy of eBay, for under USD 10.

Personally, I have a gradation of difficulty when it comes to OpenWrt installs. Grade One (the simplest) is when you just upload OpenWrt using stock firmware and a Web browser. Grade Two (slightly more complicated) is when you have to involve the console. This install is Grade Three; we’ll have to use both the console and a TFTP server. Also, we’ll need to open the case and use a UART cable in order to get to the console. And, before you ask, yes, there are still-higher grades, but today is not that day... :slight_smile:

To restate the above, for this install, we will need, in addition to an operational MX60:

  1. A UART cable (I used a USB to TTL 4-pin cable)
  2. A computer running Linux (I believe everything described here can be done on Windows, but I used a Linux machine)
  3. A TFTP server (can be set up on pretty much any computer, including the computer mentioned in the previous paragraph; I opted for a separate machine though to make cabling a little less confusing)
  4. A pair of CAT cables to connect the MX60 to an upstream device and a client computer.

Preparations — TFTP

Start by setting up a TFTP server. Incidentally, TFTP stands for Trivial File Transfer Protocol. It is a simple, no-frills (and no-security) way for one machine to share files with another. A typical use case for TFTP is network boot, often used by thin clients and, occasionally, by fat servers. We'll use TFTP to boot out router into OpenWrt.

On most Linux flavors, spinning up a TFTP server involves a one-line command to the package manager and a glance at the newly created configuration file. My designated TFTP server was an Ubuntu Server 22.04, so I elevated myself to root and went to town:

apt install tftpd-hpa

When installation is complete, you can check how your new TFTP server is doing:

systemctl status tftpd-hpa

Next, take a look at your TFTP configuration file. Use your favorite text editor to open it; the example below uses nano:

nano /etc/default/tftpd-hpa

Find the line that starts with TFTP_DIRECTORY; this is where you will need to put files that you want to be accessible via TFTP. In my case, it was /srv/tftp. Write it down for future reference.

Next, change to the directory you just identified

cd /srv/tftp

and download the initial boot file for the MX60:

wget https://downloads.openwrt.org/releases/22.03.0/targets/apm821xx/nand/openwrt-22.03.0-apm821xx-nand-meraki_mx60-initramfs-kernel.bin

When download is complete. rename the downloaded file to buck.bin and assign its ownership to user tftp. If you don't have this user on your system, go back to the TFTP configuration file and see what is says under TFTP_USERNAME; this would be the name under which TFTP runs.

Next, change your network settings so that your Ethernet port has a fixed IP address, 192.168.1.101. The MX60 will look for files to use at boot at this IP address. In my case, this was accomplished by editing the Netplan configuration file, which resides at:

/etc/netplan/00-installer-config.yaml

In your case... check your OS documentation.

Ideally, you'd want to verify that your TFTP server works. In my case, I half-assed it by verifying that (a) TFTP server is up and running according to the local systemctl (see above). and (b) the machine responds to pings sent to 192.168.1.101 from another machine on the same LAN. It's not ideal, but in my case, it turned out to be sufficient. If things didn't work as intended in the later stages, I would know that I should start debugging by properly testing the TFTP server...

When all this is done, shut the machine off for the time being; we have other things to do now.

Preparations — Console

Now we need a way to access MX60 using the console. Most business-class routers have a port for that; it may look like a COM port, or like an RJ-45 port, or even like a mini-USB port. Not so with MX60; its console port is hidden inside the case and takes the form of four pins sticking out of one corner of the motherboard.

Be sure that the MX60 is turned off and disconnected from the power supply unit. If your router is a MX60W, it might help if you removed the Wi-Fi antennas, although you don't have to.

Open the MX60's case by removing four screws on the sides of the case, two on the left, two on the right. On my unit, those were hexalobe screws, so I needed a hexalobe screwdriver to remove them. After that, the top should come off with some gentle prodding, revealing the motherboard. One corner of the motherboard will look like this:

Note that the thing under the metal shield on the bottom of the picture is the Wi-Fi card, so the metal shield and the Wi-Fi card won't be there if your unit doesn't have wireless networking and the board will look slightly different because of that.

There are four pins on this connector; they are VCC (power), RX (receive), TX (transmit), and GND (ground).

Now break out your UART cable and study the piece of paper that came with it. Your cable should have the four single-pin connectors with the same labels, VCC (power), RX (receive), TX (transmit), and GND (ground), each with a different color wire leading to it.

For this job, we will not need the VCC pin at all, so leave the VCC connector dangling. Connect the GND connector to the GND pin. Now,

WARNING! THIS IS ABOUT TO GET CONFUSING!!!

Historically, the TX connector would be connected to the RX pin and the RX connector, to the TX pin. The logic was, what one device in a connected pair transmits, the other receives, and vice versa. These days, some manufacturers buck this convention and make cables in which the TX connector must connect to the TX pin and the RX connector, to the RX pin. My UART cable came from one of those manufacturers, so on the first try, I got garbled output on the console. But when I swapped TX and RX connectors, it fixed things instantaneously. So try it one way, and if it doesn't work, try it the other way. Just remember: (1) do not connect anything to the VCC pin!!!, and (2) GND connects to GND regardless...

Cabling and First Boot

At this point, the MX60 and the TFTP server are powered off, and your other computer is probably on (if not, turn it on). Now, make sure you have the following in place:

  1. The port labeled Internet on the MX60 is connected to the TFTP server by a CAT cable. If the TFTP server has more than one Ethernet port, the connection should be to the port configured with fixed IP address 192.168.1.101.
  2. The UART cable connects your other computer to the MX60.

There are many programs that can receive and transmit data over a UART cable. I used a command-line Linux utility called screen, but many people successfully use Putty, which is available for both Linux and Windows. If you end up using Putty, be sure to instruct it to use the following connection settings:

Speed: 115200
Data bits: 8
Stop bits: 1
Parity: None
Flow control: None

With all this in place, turn on the TFTP server and give it some time to boot. When it has booted, start the console session on your other computer. Using screen for that purpose, I executed:

sudo screen /dev/ttyUSB0 115200

This tells the computer to open a connection via the UART cable at 115200 bits per second. When screen first starts, the terminal window goes blank. When that happens, do two things at once, (1) hold down the space bar on your computer, and (2) plug in the power on your MX60. When you plug in the MX60, it will start the normal boot process with stock firmware, but if it receives a "key pressed" signal from the console first thing, it will abort the normal boot, and you will see some initial output and then, a command prompt that looks like this:

=>

If all you see on the console screen is garbage, you need to turn off the MX60, abort the screen session (press Ctrl-a, then k, then y), swap the TX and RX connectors as discussed above, and try again.

Now that you gained command-line access on the console, run the following commands ONE BY ONE (console connections sometimes do funny things if you try to paste several commands into the terminal at once):

setenv owrt_load1 ubi read \${meraki_loadaddr} kernel
setenv owrt_load2 ubi read \${meraki_loadaddr} recovery
setenv lede_bootkernel bootm \${meraki_loadaddr_kernel} - \${meraki_loadaddr_fdt}
setenv owrt_bootkernel bootm \${meraki_loadaddr}
setenv owrt_bootargs setenv bootargs console=ttyS0,\${baudrate} rootfstype=squashfs mtdoops.mtddev=oops
setenv owrt_boot run meraki_ubi owrt_bootargs\; run owrt_load1 meraki_checkpart lede_bootkernel\; run owrt_load2 owrt_bootkernel
setenv owrt510_boot run meraki_ubi owrt_bootargs\; run owrt_load1 owrt_bootkernel\; run owrt_load2 owrt_bootkernel
setenv bootcmd run owrt510_boot
saveenv

The commands above will prepare the MX60 for booting OpenWrt from the TFTP server. Now we should go ahead and boot it, Run (again, ONE BY ONE):

setenv ipaddr 192.168.1.1
setenv bootargs console=ttyS0,$baudrate mtdoops.mtddev=oops;
tftpboot $meraki_loadaddr buck.bin;
bootm $fileaddr

This should start the OpenWrt boot process. If it doesn't, we need to verify whether the TFTP server is working right. In my case, everything went well. OpenWrt booted and along the way flashed me a message asking me to press Enter to gain access to the console. I did as requested and was rewarded with the OpenWrt ASCII logo.

Now that OpenWrt is up and running, we can reclaim some storage space (remembering, of course, to run commands ONE BY ONE):

ubirmvol /dev/ubi0 -N part1
ubirmvol /dev/ubi0 -N part2
ubirmvol /dev/ubi0 -N storage

Final Touches

Now OpenWrt is up and running, but it resides only in RAM. To settle it permanently, we need to perform a system upgrade. We also may want to create a recovery partition.

Right now, the Internet port of the MX 60 is still connected to the TFTP server, but it should be able to connect to the Internet, if the upstream device can provide DHCP service. So unplug the CAT cable from the TFTP server, plug it into the upstream device, give it a moment to negotiate the connection, and see if the MX60 can dial out. Try something like this:

ping -c 3 google.com

If you have a connection to the outside, you can download everything you need directly to the MX60 (this is what we will assume for the rest of this HOWTO). If not, you may need to download files to another computer first, then connect that computer to one of the LAN ports on the MX60, and use SCP to transfer the necessary files to the MX60.

So let's do the recovery partition first. Start by listing the contents of the /dev directory:

ls /dev

In the listing, there should be a directory called ubi0. There may or may not be directories called ubi0_0, ubi0_1. etc. If there are, write down their names.

Next, create the recovery partition:

ubimkvol /dev/ubi0 -s 10MiB -N recovery

Once that is done, run ls /dev again and see if there is a new directory called ubi0_X, where X is a number. In my case, the new directory was ubi0_0, so this is what I am going to use a little later.

Now download the recovery firmware to the /tmp directory:

cd /tmp
wget https://downloads.openwrt.org/releases/22.03.0/targets/apm821xx/nand/openwrt-22.03.0-apm821xx-nand-meraki_mx60-initramfs-kernel.bin

And populate the recovery partition (remember to use the appropriate directory name where I used /dev/ubi0_0):

ubiupdatevol /dev/ubi0_0 /tmp/openwrt-22.03.0-apm821xx-nand-meraki_mx60-initramfs-kernel.bin

Finally, we can perform system upgrade over the Internet:

sysupgrade https://downloads.openwrt.org/releases/22.03.0/targets/apm821xx/nand/openwrt-22.03.0-apm821xx-nand-meraki_mx60-squashfs-sysupgrade.bin

If all of the above worked, congratulations! You have successfully installed OpenWrt on your MX60. Close screen if it's still open (Ctrl-a, then k, then y), connect a client device to your MX60 and set it up to your liking using SSH or LuCI. At some point, you may want to put the top of the case back on, too... :slight_smile:

9 Likes

Since I just recently updated the page, your post adds more. You should update the Wiki page.

Others can benefit.

3 Likes

I am not sure my style fits with the TOH. I like writing HOWTOs, but TOH, as I like to joke, is more of a WHATTO. It outlines the tasks to be done, and for many of those tasks, there is more than one way to complete them. This is great for experienced users, who have their own ideas about setting up TFTP servers or choosing what type of console cable to use. I try to write for a person who is curious, but not sure what's involved and where to begin. Hence, occasional detours into what TFTP is for or what the deal is with TX and RX. Said another way, I like to write the HOWTOs I wish I had when I needed them. :slight_smile:

As for others benefiting, this is why I started writing these in the first place. :slight_smile: Now that this one is on the forum, people will find it.

Regardless, if you see something here that, in your opinion, can improve the TOH, you're welcome to use any or all of it, edited or verbatim, to update the TOH, no attribution necessary. Also, you're welcome to insert a link to this thread into the TOH page.

2 Likes

Have you been able to successfully upgrade your MX60 to 22.03.1?

Okay, I have to be honest here... After you posted this, I thought to myself, "This is what people post after they bricked their own device and want to see whether this was an accident or the upgrade is actually bad". I can afford to sacrifice a device; so I tried upgrading and, sure enough, it's a bad upgrade. I'll lay out the technical details in a second, but right now, I have to admit, I am a little ticked off by the lack of candor. The right way to do this would be to warn the community of a potentially problematic upgrade and ask for volunteers to help with testing. I hope we all can learn from this.

Now back to tech stuff...

After the upgrade, the device would basically forget its configuration, so there would be no access to it over the network.

Using the combination of console anf TFTP, I was able to roll back to 22.03.0, but I seem to be stuck in the recovery mode:

Tried to run sysupgrade a few times, but still end up in the recovery mode. Here's a console log of what happens when I try to revert to the "last-known-good" 22.03.0:

sysupgrade https://downloads.openwrt.org/releases/22.03.0/targets/apm821xx/nand/openwrt-22.03.0-apm821xx-nand-meraki_mx60-squashfs-sysupgrade.bin

Downloading 'https://downloads.openwrt.org/releases/22.03.0/targets/apm821xx/nand/openwrt-22.03.0-apm821xx-nand-meraki_mx60-squashfs-sysupgrade.bin'
Connecting to 168.119.138.211:443
Writing to '/tmp/sysupgrade.img'

/tmp/sysupgrade.img    7% |**                             |   607k  0:00:11 ETA
/tmp/sysupgrade.img   17% |*****                          |  1375k  0:00:09 ETA
/tmp/sysupgrade.img   23% |*******                        |  1839k  0:00:09 ETA
/tmp/sysupgrade.img   23% |*******                        |  1855k  0:00:12 ETA
/tmp/sysupgrade.img   24% |*******                        |  1871k  0:00:15 ETA
/tmp/sysupgrade.img   24% |*******                        |  1871k  0:00:18 ETA
/tmp/sysupgrade.img   24% |*******                        |  1887k  0:00:21 ETA
/tmp/sysupgrade.img   24% |*******                        |  1903k  0:00:24 ETA
/tmp/sysupgrade.img   24% |*******                        |  1935k  0:00:27 ETA
/tmp/sysupgrade.img   25% |*******                        |  1951k  0:00:29 ETA
/tmp/sysupgrade.img   25% |*******                        |  1967k  0:00:32 ETA
/tmp/sysupgrade.img   25% |*******                        |  1983k  0:00:35 ETA
/tmp/sysupgrade.img   25% |*******                        |  1999k  0:00:37 ETA
/tmp/sysupgrade.img   26% |********                       |  2031k  0:00:39 ETA
/tmp/sysupgrade.img   26% |********                       |  2047k  0:00:41 ETA
/tmp/sysupgrade.img   33% |**********                     |  2639k  0:00:31 ETA
/tmp/sysupgrade.img   44% |*************                  |  3471k  0:00:21 ETA
/tmp/sysupgrade.img   50% |***************                |  3935k  0:00:17 ETA
/tmp/sysupgrade.img   50% |***************                |  3951k  0:00:18 ETA
/tmp/sysupgrade.img   51% |***************                |  3967k  0:00:19 ETA
/tmp/sysupgrade.img   51% |***************                |  3999k  0:00:19 ETA
/tmp/sysupgrade.img   51% |****************               |  4015k  0:00:20 ETA
/tmp/sysupgrade.img   51% |****************               |  4031k  0:00:21 ETA
/tmp/sysupgrade.img   52% |****************               |  4047k  0:00:22 ETA
/tmp/sysupgrade.img   52% |****************               |  4063k  0:00:22 ETA
/tmp/sysupgrade.img   52% |****************               |  4079k  0:00:23 ETA
/tmp/sysupgrade.img   52% |****************               |  4095k  0:00:24 ETA
/tmp/sysupgrade.img   52% |****************               |  4111k  0:00:24 ETA
/tmp/sysupgrade.img   53% |****************               |  4127k  0:00:25 ETA
/tmp/sysupgrade.img   60% |******************             |  4687k  0:00:19 ETA
/tmp/sysupgrade.img   69% |*********************          |  5391k  0:00:13 ETA
/tmp/sysupgrade.img   78% |************************       |  6111k  0:00:08 ETA
/tmp/sysupgrade.img   89% |***************************    |  6943k  0:00:03 ETA
/tmp/sysupgrade.img   99% |****************************** |  7759k  0:00:00 ETA
/tmp/sysupgrade.img  100% |*******************************|  7770k  0:00:00 ETA
Download completed (7957208 bytes)
Cannot save config while running from ramdisk.
Fri Oct 14 10:49:35 UTC 2022 upgrade: Commencing upgrade. Closing all shell sessions.
Watchdog handover: fd=3
- watchdog -
Watchdog does not have CARDRESET support
Fri Oct 14 10:49:35 UTC 2022 upgrade: Sending TERM to remaining processes ...
Fri Oct 14 10:49:39 UTC 2022 upgrade: Sending KILL to remaining processes ...
[  387.536329] stage2 (4333): drop_caches: 3
Fri Oct 14 10:49:45 UTC 2022 upgrade: Switching to ramdisk...
Fri Oct 14 10:49:47 UTC 2022 upgrade: Performing system upgrade...
removing ubiblock0_3
[  390.042609] block ubiblock0_3: released
Volume ID 1, size 31 LEBs (3999744 bytes, 3.8 MiB), LEB size 129024 bytes (126.0 KiB), dynamic, name "kernel", alignment 1
Volume ID 3, size 32 LEBs (4128768 bytes, 3.9 MiB), LEB size 129024 bytes (126.0 KiB), dynamic, name "rootfs", alignment 1
Set volume size to 1014644736
Volume ID 4, size 7864 LEBs (1014644736 bytes, 967.6 MiB), LEB size 129024 bytes (126.0 KiB), dynamic, name "rootfs_data", alignment 1
sysupgrade successful
umount: can't unmount /dev: Resource busy
umount: can't unmount /tmp: Resource busy
[  392.187356] reboot: Restarting system
    À À À À À À À À À À À                        þ    À À À À À À À À À À À                       €                                                                                €                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       $                          (                                                                                                                                                                        *                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    €                                                                                                                                                                                                                                                             

U-Boot 2009.08-00049-g0ee25dd Meraki MX60 (Jul 27 2012 - 14:59:20)

CPU:   AMCC PowerPC 4 UNKNOWN (PVR=12c41c83) at 800 MHz (PLB=200, OPB=100, EBC=100 MHz)
       Bootstrap Option D - Boot ROM Location NAND wo/ECC 2k page (8 bits), booting from NAND
       32 kB I-Cache 32 kB D-Cache
Board: Buckminster Wireless - Meraki Buckminster Wireless Cloud Managed Router
============================
BoardID: 0 0
Reset Button Status: 1
============================
SDR0_PERCLK=0x40000300
I2C:   ready
DRAM:  512 MB
NAND:  1024 MiB
I2c read: failed 4
I2c read: failed 4
I2c read: failed 4
Net:   ppc_4xx_eth0
Initializing Bluestone Ethernet Port ... 
Disabling port 0
Disabling port 1
Disabling port 2
Disabling port 3
ENET Speed is 1000 Mbps - FULL duplex connection (EMAC0)
*** ERROR: ping address not given
RESET is un-pushed

Set serverpath and run meraki_netboot to netboot

Hit any key to stop autoboot:  1  0 
Creating 1 MTD partitions on "nand0":
0x000000240000-0x000040000000 : "mtd=2"
UBI: attaching mtd1 to ubi0
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
UBI: attached mtd1 to ubi0
UBI: MTD device name:            "mtd=2"
UBI: MTD device size:            1021 MiB
UBI: number of good PEBs:        8168
UBI: number of bad PEBs:         6
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     5
UBI: available PEBs:             73
UBI: total number of reserved PEBs: 8095
UBI: number of PEBs reserved for bad PEB handling: 81
UBI: max/mean erase counter: 372/361
Volume kernel found at volume id 1
read 0 bytes from volume 1 to 800000(buf address)
Read [3999744] bytes
Unexpected magic number 27051956
Volume recovery found at volume id 0
read 0 bytes from volume 0 to 800000(buf address)
Read [10579968] bytes
## Booting kernel from Legacy Image at 00800000 ...
   Image Name:    initramfs
   Created:      2022-09-03   2:55:34 UTC
   Image Type:   PowerPC Linux Multi-File Image (gzip compressed)
   Data Size:    7561308 Bytes =  7.2 MB
   Load Address: 00000000
   Entry Point:  00000000
   Contents:
      Image 0: 7540779 Bytes =  7.2 MB
      Image 1: 32 Bytes =  0 kB
      Image 2: 20480 Bytes = 20 kB
   Verifying Checksum ... OK
## Loading init Ramdisk from multi component Legacy Image at 00800000 ...
## Flattened Device Tree from multi component Image at 00800000
   Booting using the fdt at 0xf3109c
   Uncompressing Multi-File Image ... OK
WARNING: legacy format multi component image overwritten
   Loading Ramdisk to 1fb57000, end 1fb57020 ... OK
[    0.000000] Linux version 5.10.138 (builder@buildhost) (powerpc-openwrt-linux-musl-gcc (OpenWrt GCC 11.2.0 r19685-512e76967f) 11.2.0, GNU ld (GNU Binutils) 2.37) #0 Sat Sep 3 02:55:34 2022
[    0.000000] Found initrd at 0xdfb57000:0xdfb57020
[    0.000000] Using PowerPC 44x Platform machine description
[    0.000000] -----------------------------------------------------
[    0.000000] phys_mem_size     = 0x20000000
[    0.000000] dcache_bsize      = 0x20
[    0.000000] icache_bsize      = 0x20
[    0.000000] cpu_features      = 0x0000000000000120
[    0.000000]   possible        = 0x0000000040000120
[    0.000000]   always          = 0x0000000000000120
[    0.000000] cpu_user_features = 0x8c008000 0x00000000
[    0.000000] mmu_features      = 0x00000008
[    0.000000] -----------------------------------------------------
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000000000000-0x000000001fffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x000000001fffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000001fffffff]
[    0.000000] MMU: Allocated 1088 bytes of context maps for 255 contexts
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 129920
[    0.000000] Kernel command line: console=ttyS0,115200 rootfstype=squashfs mtdoops.mtddev=oops
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 506948K/524288K available (6732K kernel code, 660K rwdata, 840K rodata, 3764K init, 229K bss, 17340K reserved, 0K cma-reserved)
[    0.000000] Kernel virtual memory layout:
[    0.000000]   * 0xffbdf000..0xfffff000  : fixmap
[    0.000000]   * 0xe1000000..0xffbdf000  : vmalloc & ioremap
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS: 512, nr_irqs: 512, preallocated irqs: 16
[    0.000000] UIC0 (32 IRQ sources) at DCR 0xc0
[    0.000000] UIC1 (32 IRQ sources) at DCR 0xd0
[    0.000000] UIC2 (32 IRQ sources) at DCR 0xe0
[    0.000000] UIC3 (32 IRQ sources) at DCR 0xf0
[    0.000017] clocksource: timebase: mask: 0xffffffffffffffff max_cycles: 0xb881274fa3, max_idle_ns: 440795210636 ns
[    0.000032] clocksource: timebase mult[1400000] shift[24] registered
[    0.000227] pid_max: default: 32768 minimum: 301
[    0.000387] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.000402] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.002761] dyndbg: Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build
[    0.005263] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.005309] futex hash table entries: 256 (order: -1, 3072 bytes, linear)
[    0.006759] NET: Registered protocol family 16
[    0.007333] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations
[    0.007839] thermal_sys: Registered thermal governor 'step_wise'
[    0.008247] 256k L2-cache enabled
[    0.068395] PCIE0: Checking link...
[    0.090160] PCIE0: Device detected, waiting for link...
[    0.090179] PCIE0: link is up !
[    0.211165] PCI host bridge /plb/pciex@d00000000 (primary) ranges:
[    0.211206]  MEM 0x0000000e00000000..0x0000000e7fffffff -> 0x0000000080000000 
[    0.211226]  MEM 0x0000000f00000000..0x0000000f000fffff -> 0x0000000000000000 
[    0.211239]   IO 0x0000000f80000000..0x0000000f8000ffff -> 0x0000000000000000
[    0.211267] 4xx PCI DMA offset set to 0x00000000
[    0.211273] 4xx PCI DMA window base to 0x0000000000000000
[    0.211279] DMA window size 0x0000000080000000
[    0.211307] PCIE0: successfully set as root-complex
[    0.212000] PCI: Probing PCI hardware
[    0.212175] PCI host bridge to bus 0000:40
[    0.212197] pci_bus 0000:40: root bus resource [io  0x0000-0xffff]
[    0.212211] pci_bus 0000:40: root bus resource [mem 0xe00000000-0xe7fffffff] (bus address [0x80000000-0xffffffff])
[    0.212223] pci_bus 0000:40: root bus resource [mem 0xf00000000-0xf000fffff] (bus address [0x00000000-0x000fffff])
[    0.212236] pci_bus 0000:40: root bus resource [bus 40-ff]
[    0.212250] pci_bus 0000:40: busn_res: [bus 40-ff] end is updated to ff
[    0.212308] pci 0000:40:00.0: [aaa0:bed0] type 01 class 0x060400
[    0.212332] pci 0000:40:00.0: reg 0x10: [mem 0x00000000-0x7fffffff pref]
[    0.212373] PCI: Hiding 4xx host bridge resources 0000:40:00.0
[    0.213480] pci 0000:41:00.0: [168c:0030] type 00 class 0x028000
[    0.213516] pci 0000:41:00.0: reg 0x10: [mem 0xf00000000-0xf0001ffff 64bit]
[    0.213554] pci 0000:41:00.0: reg 0x30: [mem 0xf00000000-0xf0000ffff pref]
[    0.213648] pci 0000:41:00.0: supports D1
[    0.213658] pci 0000:41:00.0: PME# supported from D0 D1 D3hot
[    0.214543] pci 0000:40:00.0: PCI bridge to [bus 41-7f]
[    0.214564] pci 0000:40:00.0:   bridge window [io  0x0000-0x0fff]
[    0.214576] pci 0000:40:00.0:   bridge window [mem 0xf00000000-0xf000fffff]
[    0.214590] pci 0000:40:00.0:   bridge window [mem 0xf00000000-0xf000fffff 64bit pref]
[    0.214615] pci_bus 0000:40: busn_res: [bus 40-ff] end is updated to 7f
[    0.214737] pci 0000:40:00.0: disabling bridge window [io  0x0000-0xffffffffffffffff] to [bus 41-7f] (unused)
[    0.214756] pci 0000:40:00.0: disabling bridge window [mem 0x00000000-0xffffffffffffffff 64bit pref] to [bus 41-7f] (unused)
[    0.214785] pci 0000:40:00.0: BAR 8: assigned [mem 0xe00000000-0xe000fffff]
[    0.214803] pci 0000:41:00.0: BAR 0: assigned [mem 0xe00000000-0xe0001ffff 64bit]
[    0.214823] pci 0000:41:00.0: BAR 6: assigned [mem 0xe00020000-0xe0002ffff pref]
[    0.214834] pci 0000:40:00.0: PCI bridge to [bus 41-7f]
[    0.214846] pci 0000:40:00.0:   bridge window [mem 0xe00000000-0xe000fffff]
[    0.214860] pci_bus 0000:40: resource 4 [io  0x0000-0xffff]
[    0.214870] pci_bus 0000:40: resource 5 [mem 0xe00000000-0xe7fffffff]
[    0.214880] pci_bus 0000:40: resource 6 [mem 0xf00000000-0xf000fffff]
[    0.214890] pci_bus 0000:41: resource 1 [mem 0xe00000000-0xe000fffff]
[    0.234123] SCSI subsystem initialized
[    0.238962] clocksource: Switched to clocksource timebase
[    0.239717] NET: Registered protocol family 2
[    0.239937] IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear)
[    0.240716] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.240768] TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear)
[    0.240820] TCP bind hash table entries: 4096 (order: 2, 16384 bytes, linear)
[    0.240866] TCP: Hash tables configured (established 4096 bind 4096)
[    0.240973] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
[    0.240998] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
[    0.241177] NET: Registered protocol family 1
[    0.241254] PCI: CLS 0 bytes, default 32
[    5.525579] Unpacking initramfs...
[    5.546476] dw_dmac 4bffd0800.dma: DesignWare DMA Controller, 2 channels
[    5.551936] workingset: timestamp_bits=14 max_order=17 bucket_order=3
[    5.555348] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    5.726511] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
[    5.727731] Serial: 8250/16550 driver, 16 ports, IRQ sharing enabled
[    5.729235] printk: console [ttyS0] disabled
[    5.729330] 4ef600400.serial: ttyS0 at MMIO 0x4ef600400 (irq = 34, base_baud = 462962) is a TI16750
[    6.405111] printk: console [ttyS0] enabled
[    6.409707] Loading iSCSI transport class v2.0-870.
[    6.417728] nand: device found, Manufacturer ID: 0xec, Chip ID: 0xd3
[    6.424114] nand: Samsung NAND 1GiB 3,3V 8-bit
[    6.428539] nand: 1024 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
[    6.436196] Scanning device for bad blocks
[    6.451077] Bad eraseblock 156 at 0x000001380000
[    6.582593] Bad eraseblock 2215 at 0x0000114e0000
[    6.662615] Bad eraseblock 3438 at 0x00001adc0000
[    6.688655] Bad eraseblock 3785 at 0x00001d920000
[    6.791439] Bad eraseblock 5369 at 0x000029f20000
[    6.805035] Bad eraseblock 5513 at 0x00002b120000
[    6.984717] 4 fixed-partitions partitions found on MTD device 4e4000000.ndfc.nand
[    6.992230] Creating 4 MTD partitions on "4e4000000.ndfc.nand":
[    6.998137] 0x000000000000-0x000000100000 : "u-boot"
[    7.003858] 0x000000100000-0x000000200000 : "u-boot-env"
[    7.010578] 0x000000200000-0x000000240000 : "oops"
[    7.015978] 0x000000240000-0x000040000000 : "ubi"
[    7.030844] PPC 4xx OCP EMAC driver, version 3.54
[    7.035966] MAL v2 /plb/mcmal, 1 TX channels, 1 RX channels
[    7.041765] RGMII /plb/opb/emac-rgmii@ef601500 initialized with MDIO support
[    7.048918] TAH /plb/opb/emac-tah@ef601350 initialized
[    7.054357] /plb/opb/emac-rgmii@ef601500: input 0 in rgmii mode
[    7.077572] switch0: Atheros AR8327 rev. 4 switch registered on 4ef600c00.ethernet
[    7.723485] eth0: EMAC-0 /plb/opb/ethernet@ef600c00, MAC 00:01:73:01:23:41
[    7.730366] eth0: found Atheros AR8216/AR8236/AR8316 PHY (0x00)
[    7.736474] i2c /dev entries driver
[    7.740296] ibm-iic 4ef600700.i2c: using standard (100 kHz) mode
[    7.751245] booke_wdt: powerpc book-e watchdog driver loaded
[    7.770986] NET: Registered protocol family 10
[    7.777014] Segment Routing with IPv6
[    7.780798] NET: Registered protocol family 17
[    7.785281] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    7.798194] 8021q: 802.1Q VLAN Support v1.8
[    7.802444] drmem: No dynamic reconfiguration memory found
[    7.810880] UBI: auto-attach mtd3
[    7.814206] ubi0: attaching mtd3
[    9.944748] ubi0: scanning is finished
[    9.966883] ubi0: attached mtd3 (name "ubi", size 1021 MiB)
[    9.972496] ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 129024 bytes
[    9.979362] ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 512
[    9.986033] ubi0: VID header offset: 512 (aligned 512), data offset: 2048
[    9.992797] ubi0: good PEBs: 8168, bad PEBs: 6, corrupted PEBs: 0
[    9.998863] ubi0: user volume: 5, internal volumes: 1, max. volumes count: 128
[   10.006058] ubi0: max/mean erase counter: 372/361, WL threshold: 4096, image sequence number: 1064289950
[   10.015503] ubi0: available PEBs: 0, total reserved PEBs: 8168, PEBs reserved for bad PEB handling: 154
[   10.024923] ubi0: background thread "ubi_bgt0d" started, PID 344
[   10.032410] block ubiblock0_3: created from ubi0:3(rootfs)
[   10.056205] Freeing unused kernel memory: 3764K
[   10.061280] Run /init as init process
[   10.478715] init: Console is alive
[   10.482538] init: - watchdog -
[   10.494782] kmodloader: loading kernel modules from /etc/modules-boot.d/*
[   10.507659] kmodloader: done loading kernel modules from /etc/modules-boot.d/*
[   10.525323] init: - preinit -
[   10.681461] Atheros AR8216/AR8236/AR8316 4ef600c00.ethernet:00: Port 5 is up
[   10.689053] eth0: link is up, 1000 FDX
[   10.719244] random: procd: uninitialized urandom read (4 bytes read)
Press the [f] key and hit [enter] to enter failsafe mode
Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level
[   11.769414] Atheros AR8216/AR8236/AR8316 4ef600c00.ethernet:00: Port 3 is up
[   14.848319] procd: - early -
[   14.852152] procd: - watchdog -
[   15.423107] procd: - watchdog -
[   15.426552] procd: - ubus -
[   15.434896] random: ubusd: uninitialized urandom read (4 bytes read)
[   15.479801] random: ubusd: uninitialized urandom read (4 bytes read)
[   15.486526] random: ubusd: uninitialized urandom read (4 bytes read)
[   15.495404] procd: - init -
Please press Enter to activate this console.
[   15.917253] kmodloader: loading kernel modules from /etc/modules.d/*
[   15.974810] Loading modules backported from Linux version v5.15.58-0-g7d8048d4e064
[   15.982408] Backport generated by backports.git v5.15.58-1-0-g42a95ce7
[   16.134879] urngd: v1.0.2 started.
[   16.193450] PPP generic driver version 2.4.2
[   16.200413] NET: Registered protocol family 24
[   16.265648] ath9k 0000:41:00.0: enabling device (0000 -> 0002)
[   16.294119] ieee80211 phy0: Atheros AR9300 Rev:3 mem=0xe5500000, irq=19
[   16.375715] kmodloader: done loading kernel modules from /etc/modules.d/*
[   16.429363] random: crng init done
[   16.432779] random: 22 urandom warning(s) missed due to ratelimiting
[   36.069277] eth0: link is up, 1000 FDX
[   36.103641] br-lan: port 1(eth0.1) entered blocking state
[   36.109087] br-lan: port 1(eth0.1) entered disabled state
[   36.114737] device eth0.1 entered promiscuous mode
[   36.119550] device eth0 entered promiscuous mode
[   36.182988] br-lan: port 1(eth0.1) entered blocking state
[   36.188393] br-lan: port 1(eth0.1) entered forwarding state
[   37.129366] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready



BusyBox v1.35.0 (2022-09-03 02:55:34 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 22.03.0, r19685-512e76967f
 -----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------
root@OpenWrt:/# 
  • The MX60 requires a serial cable and has a recovery partition.
  • The MX60 hasn't successfully upgraded (version to version) in many versions, if at all - I didn't know you weren't aware. There's quite a few threads.
  • The Wiki you made notes a new boot method that was first used for version 22 (that's what candor I thought you meant - but you wrote the guide)

So I'm taking the answer to my inquiry as a "no", I have 2 devices and will get the serial when I attempt.

If you're ticked off, I'll figure it out myself and report. No need to be ticked off at me for asking a question. I don't need the issue. I hope that was just a figure-of-speech

Odd...

Not really... The critical part, I think, is this:

Volume kernel found at volume id 1
read 0 bytes from volume 1 to 800000(buf address)
Read [3999744] bytes
Unexpected magic number 27051956
Volume recovery found at volume id 0
read 0 bytes from volume 0 to 800000(buf address)
Read [10579968] bytes

It looks like the bootloader doesn't like what if finds in the kernel volume and falls back on the recovery volume.

Meanwhile, here's what happens if I try to upgrade to 22.03.1 from the current situation (looks like more of the same; the bootloader can't boot the upgraded system and falls back on the recovery):

root@OpenWrt:/# sysupgrade https://downloads.openwrt.org/releases/22.03.1/targets/apm821xx/nand/openwrt-22.03.1-apm821xx-nand-meraki_mx60-squashfs-sysupgrade.bin
Downloading 'https://downloads.openwrt.org/releases/22.03.1/targets/apm821xx/nand/openwrt-22.03.1-apm821xx-nand-meraki_mx60-squashfs-sysupgrade.bin'
Connecting to 168.119.138.211:443
Writing to '/tmp/sysupgrade.img'

/tmp/sysupgrade.img    1% |                               |   111k  0:01:08 ETA
  [Intermediate counting omitted]
/tmp/sysupgrade.img  100% |*******************************|  7780k  0:00:00 ETA
Download completed (7967448 bytes)
Cannot save config while running from ramdisk.
Fri Oct 14 20:39:16 UTC 2022 upgrade: Commencing upgrade. Closing all shell sessions.
Watchdog handover: fd=3
- watchdog -
Watchdog does not have CARDRESET support
Fri Oct 14 20:39:16 UTC 2022 upgrade: Sending TERM to remaining processes ...
Fri Oct 14 20:39:20 UTC 2022 upgrade: Sending KILL to remaining processes ...
[  786.365455] stage2 (5876): drop_caches: 3
Fri Oct 14 20:39:26 UTC 2022 upgrade: Switching to ramdisk...
Fri Oct 14 20:39:28 UTC 2022 upgrade: Performing system upgrade...
removing ubiblock0_3
[  788.894283] block ubiblock0_3: released
Volume ID 1, size 31 LEBs (3999744 bytes, 3.8 MiB), LEB size 129024 bytes (126.0 KiB), dynamic, name "kernel", alignment 1
Volume ID 3, size 32 LEBs (4128768 bytes, 3.9 MiB), LEB size 129024 bytes (126.0 KiB), dynamic, name "rootfs", alignment 1
Set volume size to 1014644736
Volume ID 4, size 7864 LEBs (1014644736 bytes, 967.6 MiB), LEB size 129024 bytes (126.0 KiB), dynamic, name "rootfs_data", alignment 1
sysupgrade successful
umount: can't unmount /dev: Resource busy
umount: can't unmount /tmp: Resource busy
[  791.049534] reboot: Restarting system

U-Boot 2009.08-00049-g0ee25dd Meraki MX60 (Jul 27 2012 - 14:59:20)

CPU:   AMCC PowerPC 4 UNKNOWN (PVR=12c41c83) at 800 MHz (PLB=200, OPB=100, EBC=100 MHz)
       Bootstrap Option D - Boot ROM Location NAND wo/ECC 2k page (8 bits), booting from NAND
       32 kB I-Cache 32 kB D-Cache
Board: Buckminster Wireless - Meraki Buckminster Wireless Cloud Managed Router
============================
BoardID: 0 0
Reset Button Status: 1
============================
SDR0_PERCLK=0x40000300
I2C:   ready
DRAM:  512 MB
NAND:  1024 MiB
I2c read: failed 4
I2c read: failed 4
I2c read: failed 4
Net:   ppc_4xx_eth0
Initializing Bluestone Ethernet Port ... 
Disabling port 0
Disabling port 1
Disabling port 2
Disabling port 3
ENET Speed is 1000 Mbps - FULL duplex connection (EMAC0)
*** ERROR: ping address not given
RESET is un-pushed

Set serverpath and run meraki_netboot to netboot

Hit any key to stop autoboot:  1  0 
Creating 1 MTD partitions on "nand0":
0x000000240000-0x000040000000 : "mtd=2"
UBI: attaching mtd1 to ubi0
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
UBI: attached mtd1 to ubi0
UBI: MTD device name:            "mtd=2"
UBI: MTD device size:            1021 MiB
UBI: number of good PEBs:        8168
UBI: number of bad PEBs:         6
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     5
UBI: available PEBs:             73
UBI: total number of reserved PEBs: 8095
UBI: number of PEBs reserved for bad PEB handling: 81
UBI: max/mean erase counter: 372/361
Volume kernel found at volume id 1
read 0 bytes from volume 1 to 800000(buf address)
Read [3999744] bytes
Unexpected magic number 27051956
Volume recovery found at volume id 0
read 0 bytes from volume 0 to 800000(buf address)
Read [10579968] bytes
## Booting kernel from Legacy Image at 00800000 ...
   Image Name:    initramfs
   Created:      2022-09-03   2:55:34 UTC
   Image Type:   PowerPC Linux Multi-File Image (gzip compressed)
   Data Size:    7561308 Bytes =  7.2 MB
   Load Address: 00000000
   Entry Point:  00000000
   Contents:
      Image 0: 7540779 Bytes =  7.2 MB
      Image 1: 32 Bytes =  0 kB
      Image 2: 20480 Bytes = 20 kB
   Verifying Checksum ... OK
## Loading init Ramdisk from multi component Legacy Image at 00800000 ...
## Flattened Device Tree from multi component Image at 00800000
   Booting using the fdt at 0xf3109c
   Uncompressing Multi-File Image ... OK
WARNING: legacy format multi component image overwritten
   Loading Ramdisk to 1fb57000, end 1fb57020 ... OK
[    0.000000] Linux version 5.10.138 (builder@buildhost) (powerpc-openwrt-linux-musl-gcc (OpenWrt GCC 11.2.0 r19685-512e76967f) 11.2.0, GNU ld (GNU Binutils) 2.37) #0 Sat Sep 3 02:55:34 2022
[    0.000000] Found initrd at 0xdfb57000:0xdfb57020
[    0.000000] Using PowerPC 44x Platform machine description
[    0.000000] -----------------------------------------------------
[    0.000000] phys_mem_size     = 0x20000000
[    0.000000] dcache_bsize      = 0x20
[    0.000000] icache_bsize      = 0x20
[    0.000000] cpu_features      = 0x0000000000000120
[    0.000000]   possible        = 0x0000000040000120
[    0.000000]   always          = 0x0000000000000120
[    0.000000] cpu_user_features = 0x8c008000 0x00000000
[    0.000000] mmu_features      = 0x00000008
[    0.000000] -----------------------------------------------------
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000000000000-0x000000001fffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x000000001fffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000001fffffff]
[    0.000000] MMU: Allocated 1088 bytes of context maps for 255 contexts
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 129920
[    0.000000] Kernel command line: console=ttyS0,115200 rootfstype=squashfs mtdoops.mtddev=oops
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 506948K/524288K available (6732K kernel code, 660K rwdata, 840K rodata, 3764K init, 229K bss, 17340K reserved, 0K cma-reserved)
[    0.000000] Kernel virtual memory layout:
[    0.000000]   * 0xffbdf000..0xfffff000  : fixmap
[    0.000000]   * 0xe1000000..0xffbdf000  : vmalloc & ioremap
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS: 512, nr_irqs: 512, preallocated irqs: 16
[    0.000000] UIC0 (32 IRQ sources) at DCR 0xc0
[    0.000000] UIC1 (32 IRQ sources) at DCR 0xd0
[    0.000000] UIC2 (32 IRQ sources) at DCR 0xe0
[    0.000000] UIC3 (32 IRQ sources) at DCR 0xf0
[    0.000017] clocksource: timebase: mask: 0xffffffffffffffff max_cycles: 0xb881274fa3, max_idle_ns: 440795210636 ns
[    0.000032] clocksource: timebase mult[1400000] shift[24] registered
[    0.000227] pid_max: default: 32768 minimum: 301
[    0.000387] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.000401] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.002761] dyndbg: Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build
[    0.005263] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.005310] futex hash table entries: 256 (order: -1, 3072 bytes, linear)
[    0.006759] NET: Registered protocol family 16
[    0.007333] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations
[    0.007839] thermal_sys: Registered thermal governor 'step_wise'
[    0.008248] 256k L2-cache enabled
[    0.068395] PCIE0: Checking link...
[    0.090160] PCIE0: Device detected, waiting for link...
[    0.090179] PCIE0: link is up !
[    0.211165] PCI host bridge /plb/pciex@d00000000 (primary) ranges:
[    0.211207]  MEM 0x0000000e00000000..0x0000000e7fffffff -> 0x0000000080000000 
[    0.211226]  MEM 0x0000000f00000000..0x0000000f000fffff -> 0x0000000000000000 
[    0.211240]   IO 0x0000000f80000000..0x0000000f8000ffff -> 0x0000000000000000
[    0.211267] 4xx PCI DMA offset set to 0x00000000
[    0.211273] 4xx PCI DMA window base to 0x0000000000000000
[    0.211279] DMA window size 0x0000000080000000
[    0.211307] PCIE0: successfully set as root-complex
[    0.212000] PCI: Probing PCI hardware
[    0.212176] PCI host bridge to bus 0000:40
[    0.212197] pci_bus 0000:40: root bus resource [io  0x0000-0xffff]
[    0.212211] pci_bus 0000:40: root bus resource [mem 0xe00000000-0xe7fffffff] (bus address [0x80000000-0xffffffff])
[    0.212224] pci_bus 0000:40: root bus resource [mem 0xf00000000-0xf000fffff] (bus address [0x00000000-0x000fffff])
[    0.212236] pci_bus 0000:40: root bus resource [bus 40-ff]
[    0.212250] pci_bus 0000:40: busn_res: [bus 40-ff] end is updated to ff
[    0.212308] pci 0000:40:00.0: [aaa0:bed0] type 01 class 0x060400
[    0.212332] pci 0000:40:00.0: reg 0x10: [mem 0x00000000-0x7fffffff pref]
[    0.212373] PCI: Hiding 4xx host bridge resources 0000:40:00.0
[    0.213480] pci 0000:41:00.0: [168c:0030] type 00 class 0x028000
[    0.213516] pci 0000:41:00.0: reg 0x10: [mem 0xf00000000-0xf0001ffff 64bit]
[    0.213554] pci 0000:41:00.0: reg 0x30: [mem 0xf00000000-0xf0000ffff pref]
[    0.213648] pci 0000:41:00.0: supports D1
[    0.213658] pci 0000:41:00.0: PME# supported from D0 D1 D3hot
[    0.214544] pci 0000:40:00.0: PCI bridge to [bus 41-7f]
[    0.214565] pci 0000:40:00.0:   bridge window [io  0x0000-0x0fff]
[    0.214576] pci 0000:40:00.0:   bridge window [mem 0xf00000000-0xf000fffff]
[    0.214591] pci 0000:40:00.0:   bridge window [mem 0xf00000000-0xf000fffff 64bit pref]
[    0.214616] pci_bus 0000:40: busn_res: [bus 40-ff] end is updated to 7f
[    0.214737] pci 0000:40:00.0: disabling bridge window [io  0x0000-0xffffffffffffffff] to [bus 41-7f] (unused)
[    0.214757] pci 0000:40:00.0: disabling bridge window [mem 0x00000000-0xffffffffffffffff 64bit pref] to [bus 41-7f] (unused)
[    0.214785] pci 0000:40:00.0: BAR 8: assigned [mem 0xe00000000-0xe000fffff]
[    0.214803] pci 0000:41:00.0: BAR 0: assigned [mem 0xe00000000-0xe0001ffff 64bit]
[    0.214824] pci 0000:41:00.0: BAR 6: assigned [mem 0xe00020000-0xe0002ffff pref]
[    0.214835] pci 0000:40:00.0: PCI bridge to [bus 41-7f]
[    0.214846] pci 0000:40:00.0:   bridge window [mem 0xe00000000-0xe000fffff]
[    0.214860] pci_bus 0000:40: resource 4 [io  0x0000-0xffff]
[    0.214870] pci_bus 0000:40: resource 5 [mem 0xe00000000-0xe7fffffff]
[    0.214880] pci_bus 0000:40: resource 6 [mem 0xf00000000-0xf000fffff]
[    0.214890] pci_bus 0000:41: resource 1 [mem 0xe00000000-0xe000fffff]
[    0.234123] SCSI subsystem initialized
[    0.238963] clocksource: Switched to clocksource timebase
[    0.239717] NET: Registered protocol family 2
[    0.239938] IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear)
[    0.240717] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.240769] TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear)
[    0.240821] TCP bind hash table entries: 4096 (order: 2, 16384 bytes, linear)
[    0.240867] TCP: Hash tables configured (established 4096 bind 4096)
[    0.240975] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
[    0.241000] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
[    0.241179] NET: Registered protocol family 1
[    0.241255] PCI: CLS 0 bytes, default 32
[    5.525579] Unpacking initramfs...
[    5.546476] dw_dmac 4bffd0800.dma: DesignWare DMA Controller, 2 channels
[    5.551936] workingset: timestamp_bits=14 max_order=17 bucket_order=3
[    5.555348] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    5.726433] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
[    5.727654] Serial: 8250/16550 driver, 16 ports, IRQ sharing enabled
[    5.729157] printk: console [ttyS0] disabled
[    5.729252] 4ef600400.serial: ttyS0 at MMIO 0x4ef600400 (irq = 34, base_baud = 462962) is a TI16750
[    6.405029] printk: console [ttyS0] enabled
[    6.409627] Loading iSCSI transport class v2.0-870.
[    6.417646] nand: device found, Manufacturer ID: 0xec, Chip ID: 0xd3
[    6.424031] nand: Samsung NAND 1GiB 3,3V 8-bit
[    6.428457] nand: 1024 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
[    6.436113] Scanning device for bad blocks
[    6.450985] Bad eraseblock 156 at 0x000001380000
[    6.582509] Bad eraseblock 2215 at 0x0000114e0000
[    6.662529] Bad eraseblock 3438 at 0x00001adc0000
[    6.688565] Bad eraseblock 3785 at 0x00001d920000
[    6.791356] Bad eraseblock 5369 at 0x000029f20000
[    6.804945] Bad eraseblock 5513 at 0x00002b120000
[    6.984622] 4 fixed-partitions partitions found on MTD device 4e4000000.ndfc.nand
[    6.992138] Creating 4 MTD partitions on "4e4000000.ndfc.nand":
[    6.998047] 0x000000000000-0x000000100000 : "u-boot"
[    7.003768] 0x000000100000-0x000000200000 : "u-boot-env"
[    7.010479] 0x000000200000-0x000000240000 : "oops"
[    7.015880] 0x000000240000-0x000040000000 : "ubi"
[    7.030747] PPC 4xx OCP EMAC driver, version 3.54
[    7.035874] MAL v2 /plb/mcmal, 1 TX channels, 1 RX channels
[    7.041675] RGMII /plb/opb/emac-rgmii@ef601500 initialized with MDIO support
[    7.048828] TAH /plb/opb/emac-tah@ef601350 initialized
[    7.054267] /plb/opb/emac-rgmii@ef601500: input 0 in rgmii mode
[    7.077466] switch0: Atheros AR8327 rev. 4 switch registered on 4ef600c00.ethernet
[    7.723492] eth0: EMAC-0 /plb/opb/ethernet@ef600c00, MAC 00:01:73:01:23:41
[    7.730371] eth0: found Atheros AR8216/AR8236/AR8316 PHY (0x00)
[    7.736481] i2c /dev entries driver
[    7.740310] ibm-iic 4ef600700.i2c: using standard (100 kHz) mode
[    7.751245] booke_wdt: powerpc book-e watchdog driver loaded
[    7.770985] NET: Registered protocol family 10
[    7.777004] Segment Routing with IPv6
[    7.780785] NET: Registered protocol family 17
[    7.785267] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    7.798181] 8021q: 802.1Q VLAN Support v1.8
[    7.802430] drmem: No dynamic reconfiguration memory found
[    7.810869] UBI: auto-attach mtd3
[    7.814192] ubi0: attaching mtd3
[    9.944773] ubi0: scanning is finished
[    9.966942] ubi0: attached mtd3 (name "ubi", size 1021 MiB)
[    9.972552] ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 129024 bytes
[    9.979418] ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 512
[    9.986089] ubi0: VID header offset: 512 (aligned 512), data offset: 2048
[    9.992852] ubi0: good PEBs: 8168, bad PEBs: 6, corrupted PEBs: 0
[    9.998919] ubi0: user volume: 5, internal volumes: 1, max. volumes count: 128
[   10.006115] ubi0: max/mean erase counter: 372/361, WL threshold: 4096, image sequence number: 1064289950
[   10.015560] ubi0: available PEBs: 0, total reserved PEBs: 8168, PEBs reserved for bad PEB handling: 154
[   10.024979] ubi0: background thread "ubi_bgt0d" started, PID 344
[   10.032461] block ubiblock0_3: created from ubi0:3(rootfs)
[   10.056235] Freeing unused kernel memory: 3764K
[   10.061307] Run /init as init process
[   10.479745] init: Console is alive
[   10.483390] init: - watchdog -
[   10.495541] kmodloader: loading kernel modules from /etc/modules-boot.d/*
[   10.508424] kmodloader: done loading kernel modules from /etc/modules-boot.d/*
[   10.526092] init: - preinit -
[   10.682017] Atheros AR8216/AR8236/AR8316 4ef600c00.ethernet:00: Port 3 is up
[   10.689219] Atheros AR8216/AR8236/AR8316 4ef600c00.ethernet:00: Port 5 is up
[   10.696738] eth0: link is up, 1000 FDX
[   10.726804] random: procd: uninitialized urandom read (4 bytes read)
Press the [f] key and hit [enter] to enter failsafe mode
Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level
[   14.848002] procd: - early -
[   14.851825] procd: - watchdog -
[   15.419851] procd: - watchdog -
[   15.423294] procd: - ubus -
[   15.431610] random: ubusd: uninitialized urandom read (4 bytes read)
[   15.476503] random: ubusd: uninitialized urandom read (4 bytes read)
[   15.483269] random: ubusd: uninitialized urandom read (4 bytes read)
[   15.492152] procd: - init -
Please press Enter to activate this console.
[   15.915097] kmodloader: loading kernel modules from /etc/modules.d/*
[   15.971593] Loading modules backported from Linux version v5.15.58-0-g7d8048d4e064
[   15.979182] Backport generated by backports.git v5.15.58-1-0-g42a95ce7
[   16.142131] urngd: v1.0.2 started.
[   16.193539] PPP generic driver version 2.4.2
[   16.200374] NET: Registered protocol family 24
[   16.256385] ath9k 0000:41:00.0: enabling device (0000 -> 0002)
[   16.284841] ieee80211 phy0: Atheros AR9300 Rev:3 mem=0xe5500000, irq=19
[   16.379301] kmodloader: done loading kernel modules from /etc/modules.d/*
[   16.427239] random: crng init done
[   16.430686] random: 22 urandom warning(s) missed due to ratelimiting
[   44.813693] eth0: link is up, 1000 FDX
[   44.846792] br-lan: port 1(eth0.1) entered blocking state
[   44.852234] br-lan: port 1(eth0.1) entered disabled state
[   44.857905] device eth0.1 entered promiscuous mode
[   44.862720] device eth0 entered promiscuous mode
[   44.972128] br-lan: port 1(eth0.1) entered blocking state
[   44.977532] br-lan: port 1(eth0.1) entered forwarding state
[   45.849353] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready



BusyBox v1.35.0 (2022-09-03 02:55:34 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 22.03.0, r19685-512e76967f
 -----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------
root@OpenWrt:/# 

Here's something else that's odd, but may be informative... The TOH page has a listing of the Flash layout for the MX60:

/ # cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00100000 00020000 "u-boot"
mtd1: 00100000 00020000 "u-boot-env"
mtd2: 00040000 00020000 "oops"
mtd3: 3fdc0000 00020000 "ubi"
mtd4: 40000000 00020000 "all"

Here's what I have on my device confined to the recovery mode:

root@OpenWrt:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00100000 00020000 "u-boot"
mtd1: 00100000 00020000 "u-boot-env"
mtd2: 00040000 00020000 "oops"
mtd3: 3fdc0000 00020000 "ubi"

Note that in my case, the entire mtd4 line is missing...

Also, can't help but notice that mtd4 is named all, while the sizes of mtd0, mtd1, mtd2, and mtd3 sum up to the size of mtd4:

00100000 + 00100000 + 00040000 + 3fdc0000 = 40000000

Perhaps if the definition of mtd4 is restored, the device can function normally, at least under 22.03.0?

@chunkeey - ideas?

More on the same topic... Here's a part of the bootlog on the TOH page:

[    0.839666] 5 ofpart partitions found on MTD device 4e4000000.ndfc.nand
[    0.846264] Creating 5 MTD partitions on "4e4000000.ndfc.nand":
[    0.852171] 0x000000000000-0x000000100000 : "u-boot"
[    0.858021] 0x000000100000-0x000000200000 : "u-boot-env"
[    0.864215] 0x000000200000-0x000000240000 : "oops"
[    0.869884] 0x000000240000-0x000040000000 : "ubi"
[    0.877133] 0x000000000000-0x000040000000 : "all"

Here's the same part from my bootlog:

[    6.982325] 4 fixed-partitions partitions found on MTD device 4e4000000.ndfc.nand
[    6.989832] Creating 4 MTD partitions on "4e4000000.ndfc.nand":
[    6.995733] 0x000000000000-0x000000100000 : "u-boot"
[    7.001450] 0x000000100000-0x000000200000 : "u-boot-env"
[    7.008146] 0x000000200000-0x000000240000 : "oops"
[    7.013591] 0x000000240000-0x000040000000 : "ubi"

If I am reading this correctly (and there's no guarantee of that), this is another indication of a partition gone missing... And not just any partition; it's a partition that contains the other four partitions within itself (it begins where the first partition begins and ends where the fourth partition ends)...

That Unexpected magic number is a clue there. This is printed by a checkpart command in one of your present bootcmd chains in u-boot. But owrt510_boot got rid of that checkpart stuff.

Could you please verify that owrt510_boot and bootcmd are really set to:

setenv owrt510_boot run meraki_ubi owrt_bootargs\; run owrt_load1 owrt_bootkernel\; run owrt_load2 owrt_bootkernel
setenv bootcmd run owrt510_boot

(if not, set them with the above commands and add a saveenv before you run bootcmd).

In doubt print the whole env with printenv (your NAND seems to have a few bad blocks, let's hope that then u-boot-env isn't in that area)

So I sysupgraded...mine rebooted to an amber light.

I'm certain I did 510, so I hooked up the serial...it boots then starts this:

[   12.651711] SQUASHFS error: xz decompression failed, data probably corrupt
[   12.658593] SQUASHFS error: Failed to read block 0x11658a: -5
[   12.741406] SQUASHFS error: xz decompression failed, data probably corrupt
[   12.748307] SQUASHFS error: Failed to read block 0x11658a: -5
[   12.842983] SQUASHFS error: xz decompression failed, data probably corrupt
[   12.849875] SQUASHFS error: Failed to read block 0x11658a: -5
[   12.931307] SQUASHFS error: xz decompression failed, data probably corrupt
[   12.938185] SQUASHFS error: Failed to read block 0x11658a: -5
...
[   16.217632] SQUASHFS error: xz decompression failed, data probably corrupt
[   16.224530] SQUASHFS error: Failed to read block 0x1fe72e: -5
[   16.230269] SQUASHFS error: Unable to read data cache entry [1fe72e]
[   16.236599] SQUASHFS error: Unable to read page, block 1fe72e, size 10d40
[   16.243429] SQUASHFS error: Unable to read data cache entry [1fe72e]
[   16.249782] SQUASHFS error: Unable to read page, block 1fe72e, size 10d40
[   16.256567] SQUASHFS error: Unable to read data cache entry [1fe72e]
[   16.262904] SQUASHFS error: Unable to read page, block 1fe72e, size 10d40
[   16.384781] SQUASHFS error: xz decompression failed, data probably corrupt
[   16.391674] SQUASHFS error: Failed to read block 0x1fe72e: -5
[   16.488210] SQUASHFS error: xz decompression failed, data probably corrupt
[   16.495109] SQUASHFS error: Failed to read block 0x1fe72e: -5
[   16.886268] SQUASHFS error: xz decompression failed, data probably corrupt
[   16.893164] SQUASHFS error: Failed to read block 0x1fe72e: -5
[   22.757297] SQUASHFS error: xz decompression failed, data probably corrupt
[   22.764190] SQUASHFS error: Failed to read block 0x11658a: -5
[   22.876221] SQUASHFS error: xz decompression failed, data probably corrupt
[   22.883113] SQUASHFS error: Failed to read block 0x11658a: -5
[   22.991663] SQUASHFS error: xz decompression failed, data probably corrupt
[   22.998550] SQUASHFS error: Failed to read block 0x11658a: -5
[   23.114158] SQUASHFS error: xz decompression failed, data probably corrupt
[   23.121047] SQUASHFS error: Failed to read block 0x11658a: -5
[   23.240235] SQUASHFS error: xz decompression failed, data probably corrupt
[   23.247124] SQUASHFS error: Failed to read block 0x11658a: -5
[   23.331469] SQUASHFS error: xz decompression failed, data probably corrupt
[   23.338352] SQUASHFS error: Failed to read block 0x11658a: -5
[   23.417650] SQUASHFS error: xz decompression failed, data probably corrupt
[   23.424546] SQUASHFS error: Failed to read block 0x11658a: -5
[   23.500690] SQUASHFS error: xz decompression failed, data probably corrupt
[   23.507576] SQUASHFS error: Failed to read block 0x11658a: -5
[   23.568047] SQUASHFS error: xz decompression failed, data probably corrupt
[   23.574939] SQUASHFS error: Failed to read block 0x11658a: -5
[   23.615183] SQUASHFS error: xz decompression failed, data probably corrupt
[   23.622072] SQUASHFS error: Failed to read block 0x11658a: -5
[   23.667348] SQUASHFS error: xz decompression failed, data probably corrupt
[   23.674240] SQUASHFS error: Failed to read block 0x11658a: -5
[   23.714502] SQUASHFS error: xz decompression failed, data probably corrupt
[   23.721399] SQUASHFS error: Failed to read block 0x11658a: -5

I press enter, I get:

BusyBox v1.35.0 (2022-10-10 16:14:30 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 22.03.1, r19777-2853b6d652
 -----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------
root@OpenWrt:/#
  • It was connected by WLAN - did not come up
  • Ethernet on LAN does not work

So my issue is slightly different. After performing a firstboot && reboot - I was OK. But amber light still...so I re-flashed 22.03.1. All is well.

EDIT: After installing packages and replacing it at it's location, it reboots to a flashing green power light.

[   11.232317] block: attempting to load /tmp/ubifs_cfg/upper/etc/config/fstab               
[   11.242062] block: extroot: not configured                                                
[   11.247834] mount_root: switching to ubifs overlay                                        
[   11.308751] urandom-seed: Seeding with /etc/urandom.seed                                  
[   11.366596] procd: - early -                                                              
[   11.369797] procd: - watchdog -                                                           
[   11.957455] procd: - watchdog -                                                           
[   11.961121] procd: - ubus -

Output stops...

I resolved it by entering Failsafe mode and mounting - then doing another firstboot && reboot

Edit 2: the second device sysupgraded without issues.

Thank you, this looks promising! A quick (and potentially silly) question: is this specific to 22.03.1 or can I use it to try and revert to the "last-known-good" 22.03.0? Right now, I have the TFTP server dishing out initramfs for 22.03.0, so if I could avoid the extra work, I would report back sooner...

The patch that extended the kernel size by removing all the meraki limitation (and hence required the uboot env changes) is from October 2021. It was already part of the openwrt-22.03-rc1 ( branched in April 2022).

(You could wait a bit until the 22.03.2 shows up too. The "sata" target already has targets. From what I've been told 22.03.1 booted though.)

@lleachii
Oh boy. Yes, squashfs is really not happy there. I can't add much insight other than what the kernel said:

xz decompression failed, data probably corrupt

I'm not aware of any kernel updates that broke or fixed issues related to mtd/xz/squashfs during the 5.10-stable releases between 22.03 and 22.03.1.

Thank you for this clarification! I was able to restore my MX60W to 22.03.0; it is working normally now. I wanted to post the console log here, but the forum wouldn't accept it (too large), so I put it on Pastebin:

https://pastebin.com/YxnDKH3Q

In addition to the commands you suggested, I ran printenv so you can see what the environment was before the TFTP boot and ip a to see if the device recognizes the network interfaces, first after the TFTP boot and then, after sysupgrade.

I don't know if this is significant, but I think I should point this out. I got distracted in the process and ran the commands you suggested twice (you will see it in the log), followed by a saveenv both times. On the first run, the saveenv message was:

Writing to redundant Nand

On the second run:

Writing to Nand

Does this mean that the trick is to setenv and saveenv twice? :slight_smile:

Hope this helps...

So FYI - on device 1

  • sysupgrade to 22.03.2 worked with no issues

Now, on the second device - an issue occurred:

  • I sysupgraded to 22.02.2 and rebooted. LuCI had a "Bad Gateway" message. So I removed uhttps and luci config files and did another sysupgrade. It rebooted to an Amber power light. WLAN did not come back, but I was able to connect via Ethernet. The Kernel Log read:
[    5.580195] ubi0: fixable bit-flip detected at PEB 953
[    5.585333] ubi0: schedule PEB 953 for scrubbing
[    5.615399] SQUASHFS error: xz decompression failed, data probably corrupt
[    5.622286] SQUASHFS error: Failed to read block 0x163eea: -5
[    5.628007] SQUASHFS error: Unable to read fragment cache entry [163eea]
[    5.634684] SQUASHFS error: Unable to read page, block 163eea, size e940
[    5.641369] SQUASHFS error: Unable to read fragment cache entry [163eea]
[    5.648042] SQUASHFS error: Unable to read page, block 163eea, size e940
[    5.654728] SQUASHFS error: Unable to read fragment cache entry [163eea]
[    5.661407] SQUASHFS error: Unable to read page, block 163eea, size e940
[    5.668094] SQUASHFS error: Unable to read fragment cache entry [163eea]
[    5.674775] SQUASHFS error: Unable to read page, block 163eea, size e940
[    5.698714] ubi0: fixable bit-flip detected at PEB 953
[    5.733299] ubi0: scrubbed PEB 953 (LEB 3:11), data moved to PEB 4044
...
[   10.508346] mount_root: loading kmods from internal overlay
[   10.544703] SQUASHFS error: xz decompression failed, data probably corrupt
[   10.551606] SQUASHFS error: Failed to read block 0x163eea: -5
[   10.557326] SQUASHFS error: Unable to read fragment cache entry [163eea]
[   10.564004] SQUASHFS error: Unable to read page, block 163eea, size e940
[   10.570708] SQUASHFS error: Unable to read fragment cache entry [163eea]
[   10.577378] SQUASHFS error: Unable to read page, block 163eea, size e940
[   10.584664] mount_root: failed to launch kmodloader from internal overlay

A third sysupgrade resolved the issue on the second device.

Just out of curiosity: are there any differences between the two devices that you know of? You mentioned custom firmware in another thread. Or was it for a different device with the same architecture?

Both devices are using firmware from the downloads site.

Just a theory... Could it be that the third sysupgrade had a "map" of bad blocks on the Flash device that the first and second sysupgrades have created and thus was able to avoid using those blocks?

I'm not sure if this was answered. 22.03.0 is the oldest release that can be used without reverting the owrt boot environment command as follows:

If you set everything correctly, you can go back to v 18 and 19 (17 had issues as I recall). And you can return back to v 21+ via:

setenv bootcmd run owrt510_boot
saveenv

See: https://openwrt.org/toh/meraki/mx60#flashing
And: [SOLVED] Upgrading Meraki MX60 to 22.03? - #4 by hnyman

EDIT: you can TFTP any version of the factory file, that's only going into volatile RAM to boot - it doesn't change the non-volatile flash chip, boot with magic number, etc. This is why the factory imaged is flashed in another step as the recovery boot image (no changes - if boot of the sysupgraded one is failed and sees it the recovery image, it'll be loaded).