Create a gist now

Instantly share code, notes, and snippets.

Flashing Intel Edison using only serial connection and wifi

Do this at your own risk. I take no responsibility for any damage caused to your board.

My Intel Edison was shipped to me with old and buggy version of the Yocto Linux image. I purchased only the console block via Sparkfun (which has only one USB port connected to UART2 (serial connection) of the Edison therefore it's not connected to the actual USB on Edison) so I could not update to a new build the normal way.

I assume you have successfully connected to the Edison via the serial connection and can use the linux console on Edison.

  1. Connect the Edison into a local WiFi network with configure_edison --wifi
  2. Check that you can access to the Edison via SSH or with browser
    • if you can't, vi /etc/systemd/system/basic.target.wants/network-gadget-init.service and change the ip addresses to i.e 192.168.99.15
  3. On Edison, cd /
  4. mkdir update
  5. mkfs.vfat -F32 -I /dev/mmcblk0p9 (mmcblk0p9 is the partition which will contain the new FW files, command formats it to FAT32)
  6. mount -t vfat /dev/mmcblk0p9 /update/ (mount the partition to the /update)
  7. Connect to the Edison i.e. with FileZilla and move the update .zip file (can be found from Intel www site) to the /update folder on Edison
  8. cd /update
  9. mkdir temp
  10. unzip update_file.zip -d temp
  11. rm update_file.zip
  12. mv temp/ota_update.scr . (ota_update.scr must be first in the folder hence this)
  13. mv temp/* .
  14. rm -rf temp
  15. reboot ota

If everything is fine, Edison should now boot and start the upgrade process automatically. It takes couple of minutes and after that you have more robust version of the Yocto image up and running. I recommend running configure_edison --setup after the update process.

@Baael
Baael commented Feb 27, 2015

Thank you!!!

@skvark
Owner
skvark commented Mar 4, 2015

You're welcome :)

@vargo
vargo commented Mar 21, 2015

Thanks!
This was the ONLY method that worked for me, and also one of the easiest!
1 minor change: I used wget to directly download the latest Edison image from intel's website.

Let my set out what my issue was and the things I tried. Hopefully this will help others in the future.
I should note the Edison did still work: I could boot, login, and run edison_configure to configure the network.


Somehow my kernel module could not be loaded anymore (debug log didn't show why) and as a result the standard firmware update methods didn't work anymore.

Method 1: push firmware update from host to Edison

Access the Edison as a mass USB device from the host OS, and move the new firmware (Intel recommended method).
Problem: my Edison did not show up as a USB drive anymore, so I didn't have a way to prepare the firmware update. I tried both on a mac and windows machine, and even replaced the micro USB cable (commen recommendation on the intel forums).

Note: this guide does essentially the same but then directly on the Edison.

Method 2: configure_edison --upgrade

Use the configure_edison tool directly on the Edison to initiate an update.
configure_edison --upgrade
This failed because it tried to unload the kernel module, which wasn't loaded in the first place!
Not sure if this would actually work: I never saw it recommended in the fora.

Method 3: on the host system, use the 'flashall.sh' script

I tried this on a few occassions but never got it to work. A few comments:

  • The flashall.sh --recovery argument is not available on mac, probably due to known issues with 64-bit OS-es
  • It took me some time to find out I actually have to put the Edison in a state where it accepts a firmware flash
    You can do this by opening a screen terminal, boot up the Edison and hit a key to abort the boot procedure. Then you can type the following command to set it in 'flash-modus' (DFU mode):
    run do_flash
    The tool would run, and everything would seem fine and reporting that I successfully flashed it.
    But then the Edison would go all Groundhog Day, and I'd be back in the same old environment with the old firmware and kernel module loading issue.
@charles-cai

The reason Edison doesn't appear as a USB mass drive (named as "Edison" with around 805.1MB) I found is that the USB cable you are using is probably charger only (e.g. from a lot of phone vendors), even some of them worked for TTY/Screen serial communication but not working as a USB mass drive cable. I tried all cables at home, only Nokia USB cable worked for me on Mac OS X.

Anyway, got my Edison upgraded using Intel recommended way. Thanks for the tip here - this helps me understand the internals of Edison more.

@skvark
Owner
skvark commented May 6, 2015

Glad to hear this little guide has been useful. And yes, wget would be easier way to download the image - I wasn't really thinking straight after a day of solving this problem :)

@maestr0
maestr0 commented Nov 2, 2015

works, thanks!

this command mounts a location which is a EDISON USB drive with only 1GB space
mount -t vfat /dev/mmcblk0p9 /update/

this method doesn't work for Yocto 2.1 because the image is over 1GB

@maestr0
maestr0 commented Nov 2, 2015

If you want to update to Yocto 2.1
download edison-image-ww25.5-15 on your computer

connect Edison
open a screen session
go to edison-image-ww25.5-15 directory on your computer and run sudo ./flashall.sh (For osx)

run reboot command on Edison
wait for the update to complete. It should take 5 min. If it took less than that, it means something went wrong.
You should be able to see the update progress on the screen terminal. The longest part is this progress bar...

Writing GPT: success!
Saving Environment to MMC...
Writing to redundant MMC(0)... done
Flashing already done...
GADGET DRIVER: usb_dnl_dfu

@thomasck
thomasck commented Feb 1, 2017

Is there a way to get this to work with the latest image? During the unzip process it says the edison runs out of space.
I am using the mini breakout board but unfortunately the lower usb port has broken off and I only can connect via serial usb or wifi.

@skvark
Owner
skvark commented Feb 17, 2017

I tried this last year and had the same issue. I'm not sure if it is possible to use this method anymore.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment