Support for Cisco Meraki MX80

I opened up an MX80 to see what was inside. Short summary:
CPU: AMCC PowerPC 460 APM86290
DRAM: 2 GB at 800MHz
NAND: 1024 MiB
HDD: 1TB WD Green
Bootlog: https://pastebin.com/rsE5RUt9
So the obvious questions:
Would it be possible to run anything other than the stock firmware on this?
Should I explore more (and how?) or should I just abandon it?

  • It seems similar to the MX60W.
  • It seems possible, as the CPU and networking appear supported.

Did you get OpenWrt running on your MX80? How did you generate the bootlog? I tried getting connected via uart/serial but mostly get unintelligible text and characters. A few x's and f's.

This project has been 'on hold' during the summer, so not much progress.
The UART is marked 'J3' and has a baud rate of 57600.
Pins are:
1: Vcc
2: Rx
3: Tx
4: GND

Thanks! All I needed to get to console was a USB to TTL device. I was originally attempting to go directly to a 9 pin serial port on the PC.

1 Like

has anyone made any progress on this? I have a spare MX80 laying around and would love to use it at home.

Does anyone know if this is possible or not? Thanks!

Welcome to the community @gillesh!

If what is possible?

We're waiting form someone to port OpenWrt to this device. Are you able to assist?

  • Can someone post this information?
  • Is there a U-Boot env?

The bootlog was generated with PuTTY when connected via serial console. See above for pinout/baudrate.
From the bootlog:

U-Boot 2009.11-00043-gf4c39d3-serengeti_DEV_1.19.01 (Feb 15 2012 - 10:40:18)

I still have this unit, but have not done any more work on it.

The command I was asking to run is printenv

Here it is:

printenv

`=> printenv
bootdelay=1
baudrate=57600
loads_echo=
preboot=echo;echo Set serverpath and run meraki_netboot to netboot;echo
nload=${netloadmethod} 200000 ${serverpath}u-boot-nand.bin
nupdate=nand erase 0 0x00100000 ;nand write 200000 0 0x00100000
nupd=run nload nupdate
kernel_addr=fc000000
fdt_addr=fc1e0000
ramdisk_addr=fc200000
netdev=eth0
netloadmethod=dhcp
ethact=ppc_4xx_eth0
ethaddr=
boardtype=pcie
mtd_addr_r=0x4000000
kernel_size=0x400000
fdt_size=0x25000
bootcmd=run meraki_fix_leds meraki_boot
meraki_bootargs=setenv bootargs root=/dev/ram console=ttyS0,${baudrate} ubi.mtd=ubi MERAKI_BOARD=fullerene mtdoops.mtddev=oops mem=0x7f000000 ${extra_bootargs}
meraki_bootfile=fuller.bin
meraki_bootlinux=bootm ${meraki_loadaddr_kernel} ${meraki_loadaddr_ramdisk} ${meraki_loadaddr_fdt}
meraki_boot=run meraki_ubi meraki_bootargs ; run meraki_load1 meraki_checkpart meraki_bootlinux; run meraki_load2 meraki_checkpart2 meraki_bootlinux
meraki_checkpart=meraki checkpart ${meraki_loadaddr}
meraki_checkpart2=meraki checkpart ${meraki_loadaddr} skiphash
meraki_netboot=run meraki_load_net meraki_checkpart2 meraki_bootargs meraki_bootlinux
meraki_loadaddr=800000
meraki_part_fdt_index=1
meraki_load1=ubi read ${meraki_loadaddr} part1
meraki_load2=ubi read ${meraki_loadaddr} part2
meraki_load_net=${netloadmethod} ${meraki_loadaddr} ${serverpath}${meraki_bootfile}
meraki_ubi=ubi part ubi
meraki_ubifile=fuller-ubi.bin
meraki_ubi_loadfile=${netloadmethod} 200000 ${serverpath}${meraki_ubifile}
meraki_ubi_update_nand=nand erase 0x00240000 0x3fdc0000 ; nand write 200000 0x00240000 ${filesize}
meraki_ubi_update=run meraki_ubi_loadfile meraki_ubi_update_nand
meraki_update_part1=run meraki_ubi meraki_load_net meraki_write1
meraki_update_part2=run meraki_ubi meraki_load_net meraki_write2
meraki_write1=ubi write ${meraki_loadaddr} part1 ${filesize}
meraki_write2=ubi write ${meraki_loadaddr} part2 ${filesize}
meraki_fix_leds=i2c mw 22 c ff 3
mtdids=nand0=nand0
mtdparts=mtdparts=nand0:0x200000@0(firmware),0x00040000@0x00200000(panic),0x3fdc0000@0x00240000(ubi)
serverpath=10.1.30.240:tftpboot/
ipaddr=192.168.1.1
serverip=192.168.1.101
gatewayip=192.168.1.1
netmask=255.255.255.0
factory_load=setenv ipaddr 192.168.1.1; setenv serverip 192.168.1.101; tftp 0x100000 uDiag-fullerene-ddr-nand.bin
factory_go=go 0x102100
factory_boot=run factory_load factory_go
console=ttyS0,${baudrate}
ver=U-Boot 2009.11-00043-gf4c39d3-serengeti_DEV_1.19.01 (Feb 15 2012 - 10:40:18)

Environment size: 2473/131067 bytes

=> bdinfo
memstart = 0x00000000
memsize = 0xFFFFFFFF80000000
flashstart = 0x00000000
flashsize = 0x00000000
flashoffset = 0x00000000
sramstart = 0x00000000
sramsize = 0x00000000
bootflags = 0x00000000
intfreq = 1000 MHz
busfreq = 500 MHz
ethaddr =
eth1addr = (not set)
IP addr = 192.168.1.1
baudrate = 57600 bps

=> coninfo
List of available devices:
serial 80000003 SIO stdin stdout stderr
serial1 00000003 .IO
serial0 00000003 .IO

=> mtdparts
device nand0 , # parts = 3
#: namesizeoffsetmask_flags
0: firmware 0x002000000x000000000
1: panic 0x000400000x002000000
2: ubi 0x3fdc00000x002400000

active partition: nand0,0 - (firmware) 0x00200000 @ 0x00000000

defaults:
mtdids : none
mtdparts: none

=> switch dev
GPIO 14 enable
Current dev: MDIO is connected to SW0`

Tried booting an image for the MX60 just to see what happened:

MX60 image boot:
## Booting kernel from Legacy Image at 00800000 ...
   Image Name:   mx60 initramfs
   Image Type:   PowerPC Linux Multi-File Image (gzip compressed)
   Data Size:    4950920 Bytes =  4.7 MB
   Load Address: 00000000
   Entry Point:  00000000
   Contents:
      Image 0: 4886357 Bytes =  4.7 MB
      Image 1: 32 Bytes =  0 kB
      Image 2: 64512 Bytes = 63 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 0xca8fc8
   Uncompressing Multi-File Image ... OK
   Loading Ramdisk to 2ffff000, end 2ffff020 ... OK

The units just resets, and I don't know where to go from here...

Perhaps @riptidewave93 can help?

Fun story here, I actually have a MX80 sitting in my closet but don't expect support anytime soon.

Specifically, that AMCC CPU had 0 mainline linux support last time I checked, so unless someone has the time and resources to port the Meraki GPL drop and work on up-streaming it, don't hold your breath for OpenWRT support.

2 Likes

The bootlog posted shows that the build date of the firmware is from mid-2018. Email open-source@meraki.com and request the GPL source code for the latest firmware. The MX80 is still under support until 2023, so it's likely still receiving firmware updates from Meraki.

If Meraki refuse to provide the GPL source code because the product is end-of-sale (as happened to me for the MS42) kindly remind them that under GPLv2 Section 3b they are required to provide the source code for any GPL binaries distributed in the last 3 years. End-of-sale is meaningless to the GPL, the build date is 2018, they're required to fork over the source code.

They should reply with the source code for the latest firmware, which will at least allow you to build the kernel and firmware.

1 Like

Any progress on this guys? I have 3 firewalls MX80 :smiley:

Have you emailed open-source@meraki.com and did Meraki provide the GPL source code for your MX80? Without the source code, there won't be any progress toward a third-party firmware.

Hi Martin,

I have the sourcecode. You can download it from here: https://dl.meraki.net/wired-14-40-mx80-20200430.tar.bz2

Also got some instructions from Cisco Meraki:

Instructions for building the OpenWRT source code and the Linux kernel for the MX80 are below.

After downloading and unpacking the tarball:

To build OpenWRT firmware:

cd meraki-firmware/openwrt

cp config-wired-powerpc-3.4 .config

make oldconfig

make -j1 BOARD=wired-powerpc-3.4 OPENWRT_EXTRA_BOARD_SUFFIX=_wired_3.4

To build Linux-3.4. kernel:

cd meraki-firmware/linux-3.4

cp ../openwrt/target/linux/wired-powerpc-3.4/config .config
make CROSS_COMPILE=../openwrt/staging_dir_powerpc_nofpu_wired_3.4/bin/powerpc-linux-uclibc- ARCH=powerpc oldconfig

make CROSS_COMPILE=../openwrt/staging_dir_powerpc_nofpu_wired_3.4/bin/powerpc-linux-uclibc- ARCH=powerpc prepare
touch rootlist

make CROSS_COMPILE=../openwrt/staging_dir_powerpc_nofpu_wired_3.4/bin/powerpc-linux-uclibc- ARCH=powerpc vmlinux

The U-boot source code for the MX80 you requested is available for download at

https://dl.meraki.net/U-boot-MX80-20171114.tar.bz2

After downloading and uncompressing the tarball, to build the MX80 U-boot:

export CROSS_COMPILE=/path/to/powerpc-cross-toolchain

cd U-boot.MX80

make meraki_nand_config

make u-boot.bin

Is this enough info to make the MX80 work in OpenWRT?

Regards,
Mihai Cristea

1 Like

Hi Mihai, thanks a lot for requesting the source code from Meraki. I'll mirror it on GitHub so it's available for others to easily access.

OpenWrt support depends on a lot of factors, and if the earlier comments about the SoC not being in mainline Linux are correct, then it is unlikely that OpenWrt will support the device until the modifications are mainlined.

I don't own an MX80 myself, but I can take a look at the source code and see if it is possible to create a more flexible firmware from the source archive provided by Meraki.

Here is a post of serial port access

I think in order to compile use Ubuntu 14 OS as the kernel config was created using GCC 4.8.3

config-wired-powerpc-3.4

BR2_GCC_VERSION="4.8.3"