The Minnowboard Chronicles Episode 2: Updating the UEFI Firmware

Last week, I wrote about my out-of-the-box experience with the Minnowboard Turbot, and how easy it was to start JTAG-based debugging on it with the SourcePoint tool. This week, I explored the UEFI shell, and updated the board firmware.


When I first powered up the Minnowboard Turbot last week, it went directly into the UEFI shell. It’s a natural reaction to type “help” at the Shell> prompt (Tip: type “help –b” so the information doesn’t scroll off the page), and below is the first screen of what you’ll see:

MNW UEFI shell help

It’s a powerful shell, with a full suite of commands and scripting operators (note to self: look for some good online documentation (with examples) on the UEFI shell, beyond what is available simply within the help system). Since UEFI is so low-level, you can explore the intrinsics of the BIOS itself, as well as some architectural aspects of the board. For example, the “pci 00 00 00 –i” command displays the PCI configuration space of Bus 0, Device 0, Function 0:

MNW UEFI shell pci 00 00 00 -i

After tinkering with the UEFI environment for a while, I realized that the firmware that shipped with the board was a little outdated. This is a picture of the UEFI boot manager screen that came up when I first powered on the unit:

MNW boot manager screen r90

The release of this firmware is MNW2MAX1.X64.0090.R01.1601281003, or in short form 0.90. By going onto the Intel firmware site, https://firmware.intel.com/projects/minnowboard-max, I saw that the most recent version is 0.94. It was time to update the firmware – something that can be somewhat difficult on Intel designs that you might have at home.

But on the Minnowboard Turbot, it was easy. Intel’s firmware site provides the EFI shell script as well as the full 64-bit binary image, which I downloaded onto a USB flash stick. Excellent instructions on doing the firmware update are here: https://minnowboard.org/tutorials/updating_your_firmware (another note to self: there’s a Debug version of the firmware available too for later exploration). The beauty of it is that you don’t need to flash the board with for example a Dediprog programmer; just run the included UEFI script, and it takes care of the rest.

It took some contortions to get the Minnowboard to recognize the USB stick file system (yet another note to self: start with a small flash drive (8GB), and not a big one (128GB), and make sure that it is FAT32-formatted), but after playing around a little, the update started, and completed successfully:

MNW successful fw install

And, you can see from the UEFI boot manager options screen that the new update (release 0.94) is now installed:

MNW boot manager screen r94

It then occurred to me to launch SourcePoint and see what the code is doing while waiting for keyboard input from the boot manager screen, as opposed to the UEFI shell from last week. I went through the same procedure as last week, and you can see the disassembled code window here:

SP Minnowboard boot manager screen

What shows up in the Code window is basically identical to what we saw in last week’s blog, except for being at a different address. The instruction pointer is sitting at a single RETN instruction. That is worthwhile investigating!

Of course, it would be much clearer too if we had source code – that’s on my agenda for next time.

The commercial is saved for the end: if you want to know more about SourcePoint, please feel free to visit our website here. There’s an excellent video of the GUI which shows the ease-of-use and power of the tool on that page. You can also request a live demo here.

Alan Sguigna