Skip to the content.

Building and using MCUboot with RIOT

MCUboot began its life as the bootloader for Mynewt. It has since acquired the ability to be used as a bootloader for RIOT as well. Currently the support is limited to the nrf52dk platform.

Building the bootloader itself

In this first version, a prebuilt Mynewt binary is downloaded at compile time. This binary was compiled to do an integrity check, but not a signature check. In order to configure the bootloader for signature check it is necessary to re-compile it either with Mynewt or Zephyr, following the provided instructions.

In the next version, it is planned to compile MCUboot using RIOT, which should be able to boot any of the supported OS images.

Building applications for the bootloader

A compatible MCUboot image can be compiled by typing: make mcuboot.

The only variable which needs to be set is IMAGE_VERSION loaded with a valid formatted value. The format is major.minor.patch+other (e.g. export IMAGE_VERSION= 1.1.1+1. This variable can be either exported in the Makefile or manually, prior to the compilation process.

The goal is to produce an ELF file which is linked to be flashed at a BOOTLOADER_OFFSET offset rather than the beginning of ROM. MCUboot also expects an image padded with some specific headers containing the version information, and trailer type-length-value records (TLVs) with hash and signing information. This is done through the imgtool.py application, which is executed automatically by the RIOT build system.

Signing the application

The application will be automatically signed with the provided key. If no key is provided, a new key will be automatically generated. The default key type is RSA-2048.

In order to use your provided key, you need to recompile the bootloader using you public key, either in Zephyr or Mynewt by following the provided procedure for the selected OS.

Flashing the application

The application can be flashed by typing: make flash-mcuboot. This will flash both the bootloader and the application.