OpenWrt on Meraki MR42

There is PR for MR42/52, work of clayface (GitHub account), with the install steps.

Clayface's repo with the compiled u-boot and uImage from MR42 & MR52

1 Like

If anyone wants to try installing for testing purposes only, please follow the updated guide on the "ipq806x: add support for Cisco Meraki MR42/MR52" commit, not the PR message. You will need to compile your own sysupgrade image. Any feedback or critique is welcome but please be very careful.

Just in case someone has newer fw and needs to use UART, it is possible to flash this thing without having to solder. To do this you need to attach a 4 pin header and then attach the tty and use a clothes peg to put diagonal pressure so that the pins make contact with the PCB.

@clayface, thank you for the updated steps and the images!

If one is keeping the Meraki firmware portions on the respective MTD parts ( diagnostic1 part.old storage part.safe):

  • is it possible to have a fully functional OpenWRT? My guess yes, as the storage is 128MB. Do you how much space will one have to work with if we skip UART step 5?
  • also should one do backup the original uboot the keep the option restoring to original Meraki fw open? Or we can move ahead with your uboot build and leave it on it will work as "normal" in non-drag. mode - as that has everything as the original plus the TFTP option for OpenWRT install only?

There isn't that much space available, the ubi capacity is <70MB with around 25MB available if keeping the Meraki OS:

root@OpenWrt:/# ubinfo -a                                                       
UBI version:                    1                                               
Count of UBI devices:           2                                               
UBI control device major/minor: 10:62                                           
Present UBI devices:            ubi0, ubi1                                      
                                                                                
ubi0                                                                            
Volumes count:                           4                                      
Logical eraseblock size:                 126976 bytes, 124.0 KiB                
Total amount of logical eraseblocks:     566 (71868416 bytes, 68.5 MiB)         
Amount of available logical eraseblocks: 211 (26791936 bytes, 25.5 MiB)         
Maximum count of volumes                 128                                    
Count of bad physical eraseblocks:       0                                      
Count of reserved physical eraseblocks:  20                                     
Current maximum erase counter value:     354                                    
Minimum input/output unit size:          2048 bytes                             
Character device major/minor:            247:0                                  
Present volumes:                         0, 2, 3, 4                             
                                                                                
Volume ID:   0 (on ubi0)                                                        
Type:        static                                                             
Alignment:   1                                                                  
Size:        95 LEBs (12062720 bytes, 11.5 MiB)                                 
Data bytes:  11952128 bytes (11.3 MiB)                                          
State:       OK                                                                 
Name:        diagnostic1                                                        
Character device major/minor: 247:1                                             
-----------------------------------                                             
-----------------------------------                                             
Volume ID:   2 (on ubi0)                                                        
Type:        static                                                             
Alignment:   1                                                                  
Size:        87 LEBs (11046912 bytes, 10.5 MiB)                                 
Data bytes:  10997760 bytes (10.4 MiB)                                          
State:       OK                                                                 
Name:        part.safe                                                          
Character device major/minor: 247:3                                             
-----------------------------------                                             
Volume ID:   3 (on ubi0)                                                        
Type:        dynamic                                                            
Alignment:   1                                                                  
Size:        67 LEBs (8507392 bytes, 8.1 MiB)                                   
State:       OK                                                                 
Name:        storage                                                            
Character device major/minor: 247:4                                             
-----------------------------------                                             
Volume ID:   4 (on ubi0)                                                        
Type:        static                                                             
Alignment:   1                                                                  
Size:        82 LEBs (10412032 bytes, 9.9 MiB)                                  
Data bytes:  10330112 bytes (9.8 MiB)                                           
State:       OK                                                                 
Name:        part.old                                                           
Character device major/minor: 247:5                                             
                                                                                
===================================

It isn't necessary. To restore you would need to copy bootkernel1 to bootkernel2. The meraki OS would then boot and very likely replace u-boot by itself. The u-boot doesn't do anything that would break the Meraki OS.

Thanks for the confirmation, just checked the free space in the Meraki's diagnostic OpenWRT.
I can live with 25Mbytes, most of the previous devices had 16Mbytes chip altogether.

I'll do the OpenWRT upgrade, let me know if you need anything else to test on additional MR42 devices.

I can confirm that this indeed works most beautifully!

1 Like

So this is now a working openwrt on the mr42? I have one end of service and would love to get it on openwrt!!!

1 Like

As the merge request has not been merged as of yet one would need to do its own custom build of it. That said I do have such a build running with an uptime of 19 days now and it all works perfectly. With the two MR42 I have I actually tried both initial installation variants (e.g. the diagnostic mode one not requiring opening the device and the one requiring serial UART access).

3 Likes

What instructions are you using, I have a MR42 sitting on the shelf collecting dust that I would love getting OWRT on. I am also a noob, is it as easy to put OWRT on as the MR16??
Thanks

Please have a look at the merge request which includes full instructions.

Thank you, this is all new to me. I'm not clear on this part.

Option 1:
If you are sure you have set up the TFTP server correctly you can
run this script on the device. This will download and flash the u-boot
image immediately:

`/etc/update_uboot.sh 192.168.1.250 mr42_u-boot.mbn`

Option 2:
If you are unsure the TFTP server is correctly set up you can obtain
the image and flash manually:

  1. `cd /tmp`
  2. `tftp-hpa 192.168.1.250 -m binary -c get mr42_u-boot.mbn`
  3. Confirm file has downloaded correctly and is correct size.
  4. The following are the required commands to write the image.

    `echo 1 > /sys/devices/platform/msm_nand/boot_layout
     mtd erase /dev/mtd1
     nandwrite -pam /dev/mtd1 mr42_u-boot.mbn
     echo 0 > /sys/devices/platform/msm_nand/boot_layout`

To me those last 4 lines are meant only for option 2, yet outside the box for these 2 options, there is a step that says: * Important: You must observe the output of the nandwrite command.
Look for the following to verify writing is occurring:emphasized text*

`Writing data to block 0 at offset 0x0
 Writing data to block 1 at offset 0x20000
 Writing data to block 2 at offset 0x40000`

Option 1 generates these lines we should watch for as well?

Thank you

Yes. The same commands are used in both cases, but doing option 2 allows the user to interactively check they have got it right. Do option 2 unless you are absolutely sure its safe.

BTW follow the instructions in the commit and not the PR message. The PR message will be lost once merged.

I am also stuck where you are. I got the three lines of output and couldn't load the @sumo files. I further tried to manually push the sysupgrade version to use the sysupgrade command but it said it was an invalid image. Also the ubirmvol command from the cleanup script doesn't exist on my unit.

Got it all sorted, found the repo and the files required.

Tried this a few times, running into some snags:

  1. 1. Hold down reset at power on and keep holding, after around 10 seconds
  • if the orange LED changes behaviour to begin flashing, proceed to release*
  • reset, then press reset two times. Ensure that the LED has turned blue.*

Once the LED start blinking, how fast do I need to press reset after releasing? Like double clicking on a mouse, or slower? I wait and wait, tried a few different ways, LED doesn't turn blue - how long should this take, is it immediate?

I proceeded to go on anyway, and was able to load and see the following:

`Writing data to block 0 at offset 0x0
 Writing data to block 1 at offset 0x20000
 Writing data to block 2 at offset 0x40000`

However, confused about the next step...

  1. 4. Hold the reset button and power on the device. This will immediately begin downloading the appropriate initramfs image and boot into it.
    5. Once a solid white LED is displayed on the device, continue to the UART installation method, step 5.

I need some clarity here. How long does one hold the reset button, is it just for 1 or 2 seconds, and then it's released after I see a light, or do I need to hold it until I see a solid white LED?

Can anyone chime in who is trying this, in particular with the blue light timing?

Thanks

@solarbeat and @False are you guys getting this blue light? I am not able to get this blue light hitting reset twice.

The orange LED is solid, then starts flashing white, this is when I stop pushing reset, and then hit reset twice. However the LED does NOT turn blue.

I am able to telnet and run the commands fine and get the output expected. However, I am having another issue on the next step as @solarbeat.

I pushed through and then tried to also do the sysupgrade with the ITB file only to get this error:

root@OpenWrt:/tmp# sysupgrade openwrt-ipq806x-generic-meraki_mr42-initramfs-fit-uImage.itb
Error: mandatory section(s) missing from "openwrt-ipq806x-generic-meraki_mr42-initramfs-fit-uImage.itb". Abort...
Image check 'platform_check_image' failed.
root@OpenWrt:/tmp#

I'm getting a blinking white light after orange, regardless of how many times I press. I just hold it longer to get it. If I do nothing, orange.

I get the same error as you for the sysupgrade.

The FW version of my MR42 was MR 25.13 when I pulled it, I made a note to write this down.
If anyone can say (over this version you need a UART) it would be great to know (I don't have a UART and have no idea where to get one)

Any chance you recall or had it noted what FW version your MR42s were running? TY

Yes, I do keep logs of anything I do. However, I do not know what exact proprietary Cisco Meraki versions those would align to.

1st unit:

U-Boot 2012.07-00012-g6a9e9dc-dirty [local,local] (Oct 14 2015 - 13:10:45)

Linux version 3.4.110 (mprokos@lams) (gcc version 4.8.3 (GCC) ) #2 SMP Wed Jan 13 14:13:02 PST 2016

Linux version 3.4.110 (mprokos@lams) (gcc version 4.8.3 (GCC) ) #4 SMP Wed Jan 13 14:11:57 PST 2016

ONFI probe : Found an ONFI compliant device MX30UF1G18AC

bootsh build 24-189947M-gf4598ac1-mprokos

2nd unit:

U-Boot 2012.07-gb6f2d34-dirty [local,local] (Mar 29 2016 - 08:32:34)

Linux version 3.4.110 (mprokos@lams) (gcc version 4.8.3 (GCC) ) #4 SMP Tue Jan 5 12:59:51 PST 2016

Linux version 3.4.110+ (meraki@buildbot106.meraki.com) (gcc version 4.8.3 (GCC) ) #3 SMP Tue Feb 9 20:33:42 PST 2016

ONFI probe : Found an ONFI compliant device S34MS01G2

bootsh build T-189080M-g9e3d697b-mprokos

I believe you guys are not really running proper initramfs OpenWrt but rather still that diagnostic mode one from Cisco Meraki whose sysupgrade, of course, does not quite accept a proper sysupgrade image.