Unable to run tftp command to upload OpenWrt to Meraki MR33

I will preface this post by saying I'm not familiar with the world of flashing so please excuse my inexperience. I'm hoping some one out there can help me. I have an old Meraki MR33 WAP I was given and trying to make use of.Im trying to follow the guides on https://openwrt.org/toh/meraki/mr33 and https://drive.google.com/drive/folders/1jJa8LzYnY830v3nBZdOgAk0YQK6OdbSS

I'm trying to perform the flash using Ubuntu 20 and running tftpd-hpa as my tftp server. I have also installed atftp to use as client. I have a serial USB adapter and can successfully run UBOOT as shown below.

U-Boot 2012.07-ga8496ca-dirty [local,local] (Mar 10 2018 - 09:10:50)

DRAM:  242 MiB
machid : 0x8010001

COM: Product: meraki_Stinkbug
NAND:  ONFI device found
128 MiB
Using default environment

In:    serial
Out:   serial
Err:   serial
machid: 8010001

COM: Net:   
COM: MAC0 addr:0:3:7f:ba:db:ad
PHY ID1: 0x4d
PHY ID2: 0xd072
ipq40xx_ess_sw_init done
eth0
Hit any key to stop autoboot: 11 
CO10 
CO 9 
CO 8 
CO 7 
CO 6 
CO 5 
CO 4 
CO 3 
CO 2 
CO 1 
CO 0 
Hello from MR33 U-BOOT
Creating 1 MTD partitions on "nand0":
0x000000c00000-0x000007c00000 : "mtd=0"
UBI: attaching m

My problem is once I get to this point I try to run the following command as per the instruction and get stuck:

Once you see the “Hello from MR33 U-Boot” message, the MR33 has successfully booted and will be listening on IPv4 192.168.1.1 for incoming TFTP traffic. So please follow with the next step and start the tftp transfer.

Upload the openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb image to the MR33

# echo -e "binary\nput openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb" | tftp 192.168.1.1
tftp> tftp> Sent 6134136 bytes in 5.2 seconds

I have tried to scour the internet for help including this forum and have not been able to find a resolution. I seen someone had a somewhat similar tftp issue and his problem was resolved by disabling the firewall on linux. I have tried that and I still can't get the command to run as it does not recognize

# echo -e "binary\nput openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb" | tftp 192.168.1.1

Anyone has any ideas?

What is the output when you run that command?

After entering

root@Linux:/# echo -e "binary\nput openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb" | atftp 192.168.1.1

I get the following:

tftp> binary
tftp: bad command name.
tftp> put openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb
tftp: can't open openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb for reading.
tftp>

Edit: I have already moved the file above to /srv/tftp and have tested the tftp server with my mac by downloading a test.txt file from it without a problem.

The message says the file could not be found on your computer. Then you moved the file to the correct location. What is the message now?

Sorry for the confusion. The file was already in the tftp directory prior to me running that command. I just wanted point that out.

In that case, I understand "atftp" is still unable to find the file; perhaps it needs to be in the current folder?

Well in this case the file openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb was already in /srv/tftp. The output posted above came after the file was moved. I just used mv to move it from my downloads folder to the /srv/tftp folder before I ran the command

root@Linux:/# echo -e "binary\nput openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb" | atftp 192.168.1.1

which resulted in:

tftp> binary
tftp: bad command name.
tftp> put openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb
tftp: can't open openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb for reading.
tftp>

Just to clarify, I did not log into tftp and run

tftp> binary
tftp: bad command name.
tftp> put openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb
tftp: can't open openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb for reading.
tftp>

myself. That was literally the result of me entering

root@Linux:/# echo -e "binary\nput openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb" | atftp 192.168.1.1

Since I know tftp is working as intended, Is there a command I could run to push openwrt to the mr33 from the tftp CLI? I'm not all that familiar with tftp commands..

Perhaps I am being too dense but...

You are not using any TFTP server here, you are using the command line version. It does not matter how you have configured the daemon, or what files you put on the server's folders. Only the parameters that you pass to the "aftp" program matter now.

You seem to be executing this command from the root directory, but the files are on your downloads folder and in "/srv/tftp", so "aftp" cannot find the local file, because it is somewhere else. You should launch that command from your downloads folder or in "/srv/tftp", so the command line version can find the file.

Also, notice how "aftp" is refusing the "binary" command. Either it does binary transfers by default, or it could corrupt the file during the transfer. I think you need to pass the "--option "mode octet"" parameter to be sure.

1 Like

Static IP the PC to something in 192.168.1.0/24.

If time isn't critical you can start the tftp client then issue a put command at the TFTP prompt. Specify the path to the file if it isn't in the present directory. Also of course the file name has to match if you downloaded a different version.

I'm not sure if atftp interprets the "binary" option or if it is default now. Some flavor of tftp likely comes with Ubuntu. Also Windows 10 has a built in CLI TFTP client which will work, though it has to be activated with Windows Features in the Control Panel.

There's also no reason to (ever) use the atftp client as root, I guess running it under your normal user already avoids a number of issues.

I don't really understand why your example pipes echo in to supply you commands, atftp has dedicated commandline parameters to cover this as well:

$ atftp --trace --option "timeout 1" --option "mode octet" --put --local-file openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb 192.168.1.1

I took a little break from this project and am back at it tonight.

I deleted atftp and installed the tftp package which allowed me to run the binary command when in tftp without issue. What I have done is start tftp inside of the /srv/tftp directory which is where the openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb file is located.

I use tftp 192.168.1.1 and once in tftp I run the binary command to change mode to octet and then I run put openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb
After doing that, I no longer get errors, it just skips to tftp>

dev@linux:/srv/tftp$ tftp 192.168.1.1
tftp> binary
tftp> status
Connected to 192.168.1.1.
Mode: octet Verbose: on Tracing: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> put openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb
putting openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb to 192.168.1.1:openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb [octet]
tftp>

I made sure my computer was set to static 192.168.1.2 and set the gateway to 192.168.1.1
I keep my serial adapter connected the whole time as well as a patch cable going from my computer directly into the MR33

When I try to follow the next step which is to ssh into the MR33 using ssh root@192.168.1.1 I get

ssh: connect to host 192.168.1.1 port 22: Connection timed out

I can ping 192.168.1.1 without any issue.

When I connect to the MR33 via the serial adpater using putty I can see that its listening to tftp 192.168.1.1 but as soon as I connect via serial, I interrupt the process and have to start over.

Any additional assistance available for this total newb?

As a reminder, the instructions i'm trying to follow are here