Introducing automatic U-Boot patching

In the rocko branch of the meta-mender layer, we have just added a new feature which allows U-Boot to be auto-configured, avoiding the need to do the tedious and difficult task of creating a manual patch for it. For now, the feature only works for devices with MMC/SD card storage, but we plan to extend support to Flash based devices later. You can read more about the new feature, as well as some of its limitations, on our documentation site.

The Yocto Project build system will attempt to use this auto-patching method automatically, but in this article we will focus on how users that don't use Yocto can use the backend parts of the feature to produce a similar patch for their build system. The core of the feature is a script which takes as input a directory containing a checkout of U-Boot source code, and then uses this to produce a patch against that tree. The tree should have all patches applied that you normally apply during a U-Boot build, and it also needs to have all Mender patches applied. You can read more about how the Mender patches are applied in the earlier blog post about non-Yocto build systems, specifically the part under "U-Boot".

After a directory containing the source code for your board has been prepared, you should also make sure that your shell environment has the correct build environment, since the script will reuse some of the components, such as the cross compiler. How to do this is specific to each build system, so you will have to consult its documentation. When things are set up correctly, here is how you call the script:

cd u-boot
env \ CC=arm-linux-gnueabi-gcc \ $META_MENDER_DIR/meta-mender-core/recipes-bsp/u-boot/files/ \ --config=$MY_BOARD_CONFIG \ --src-dir=$PWD \ --tmp-dir=/tmp/u-boot-auto-configure

Let's go through how it works:

  1. The initial line is just to enter in the right folder. You should replace this with whatever folder your U-Boot source code is in.
  2. env and the assignment of CC is to feed the correct cross compiler to the script. This might be something else than arm-linux-gnueabi-gcc, especially if doing this inside a specialized build environment, but arm-linux-gnueabi-gcc is quite common. Also, if your build environment already export CC in the environment, then you can drop this assignment from the command line.
  3. $META_MENDER_DIR should point to a directory containing a clone of meta-mender.
  4. The --config parameter should be given the machine configuration for your board. This is the definition file inside the configs folder in U-Boot. An example is am335x_boneblack_defconfig for Beaglebone Black.
  5. --src-dir simply points to the current folder.
  6. --tmp-dir points to a temporary folder that can be used to carry out some of the build steps that the script will perform underways.

After the above script has finished, hopefully successfully, your original directory will have been modified and you can use git diff to see what the resulting patch is. Then integrate this patch into your build procedure, or submit it to Git, and you should hopefully have a working U-Boot with Mender integration!

Recent articles

The top challenge for autonomous vehicles: What does adding AI to cars mean for OEMs?

The top challenge for autonomous vehicles: What does adding AI to cars mean for OEMs?

The critical question for the automotive industry is: how can you shorten the time to market and innovate faster in software and AVs to meet more demanding customer requirements?
What’s New in Mender 3.7: Introducing the C++ Client for portability

What’s New in Mender 3.7: Introducing the C++ Client for portability

Mender 3.7 is released, including all the features published on hosted Mender over the last few months as part of our continuous development and rolling release process.
How over-the-air (OTA) updates help emergency response teams

How over-the-air (OTA) updates help emergency response teams

Discover how over-the-air (OTA) updates revolutionize emergency response teams, ensuring secure and seamless device maintenance and functionality in critical situations.
View more articles

Learn more about Mender

Explore our Resource Center to discover more about how Mender empowers both you and your customers with secure and reliable over-the-air updates for IoT devices.