U-Boot v2022.04 for i.MX platforms
Published on November 9, 2022
Boundary Devices is pleased to release U-Boot v2022.04 with support for all our i.MX-based SBCs and SOMs.
For the impatient
Our build server automatically generates and uploads all the latest binaries to this address:
The README file contains the exact commit ID for these build images. For those not sure about what to download, you can check the current configuration from the U-Boot prompt:
=> printenv uboot_defconfig
You can then follow the flashing procedure section to flash the latest binary.
What’s new?
Binman support
One big change in U-Boot v2022.04 is the use of binman
, a new mechanism for building images, from simple SPL + U-Boot combinations, to more complex arrangements with many parts.
Its usage will be transparent to most of you but know that it exists, it is the tool that now puts together the flash.bin binary needed by the i.MX 8 processors.
You might wonder why it has changed? Basically the U-Boot community wants to avoid multiple image-building code for each processor that exists. NXP provides the imx-mkimage
tool to create the final image but using binman
gets rid of that extraneous tool and complies with mainline requirements.
If you're interested in the subject, we recommend reading the tool README documentation.
Here is an example of the binman
layout declaration for i.MX 8M Plus processors:
As binman
changes the way the binaries are generated, our HAB scripts have been updated to work like before (and therefore be transparent for the user as well).
Display configuration support
Like previous U-Boot version, it supports all the different display interfaces: LVDS, MIPI, LCD, HDMI. If you use one of our displays, it should always be auto-detected. You can list all the supported displays from the prompt:
=> fbpanel
Here is an example of how to manually set up the board for use with our BD070LIC3 MIPI display.
=> setenv fb_mipi tm070jdhg30
=> savee
=> reset
Miscellaneous improvements
Although no exhaustive list of changes is available between v2020.10 and v2022.04, we know many drivers have been improved. For instance USB3.0 for i.MX 8M Plus processors is now working properly, allowing much faster transfers for fastboot flashing for instance.
Build instructions
Getting the source code
First, clone our U-Boot git repository. This is the branch you'll need to compile and install to work with the new kernel.
~$ git clone https://github.com/boundarydevices/u-boot -b boundary-v2022.04
~$ cd u-boot
~/u-boot$ sudo apt-get install device-tree-compiler swig
Choosing the proper defconfig
Here you'll need to find and make the relevant defconfig for your board. If you have the board running U-Boot already, you can type the following to see which defconfig you should build.
=> printenv uboot_defconfig
Otherwise, to see all the defconfigs, use this command and pick the one that is right for you.
~/u-boot$ find configs/ -name "nit*defconfig"
Building for i.MX6/7
Now compile that defconfig. For 32-bit platforms, we'll use nitrogen6q_defconfig
as an example.
~/u-boot$ sudo apt-get install crossbuild-essential-armhf
~/u-boot$ export ARCH=arm
~/u-boot$ export CROSS_COMPILE=arm-linux-gnueabihf-
~/u-boot$ make nitrogen6q_defconfig
~/u-boot$ make u-boot-dtb.imx -j8
~/u-boot$ cp u-boot.dtb.imx u-boot.nitrogen6q
Building for i.MX8
For 64-bit platforms, we'll use nitrogen8mp_2gr0_defconfig
as an example.
~$ sudo apt-get install crossbuild-essential-arm64
~$ export ARCH=arm64
~$ export CROSS_COMPILE=aarch64-linux-gnu-
~$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.17.bin
~$ chmod +x firmware-imx-8.17.bin
~$ ./firmware-imx-8.17.bin
~$ cp firmware-imx-8.17/firmware/hdmi/cadence/signed_hdmi_imx8m.bin u-boot/
~$ cp firmware-imx-8.17/firmware/ddr/synopsys/lpddr4*.bin u-boot/
~$ cd u-boot
~/u-boot$ make nitrogen8mp_2gr0_defconfig
~/u-boot$ make -j8
At this point, you can rename the bootable image from flash.bin
to u-boot.${uboot_defconfig}
~/u-boot$ cp flash.bin u-boot.nitrogen8mp_2gr0
Flashing procedure
For i.MX 8 platforms, the easiest might be to use fastboot to flash the bootloader:
- Enter fastboot mode
=> fastboot 0
- Connect your PC to the platform
- Either microUSB or TypeC cable depending on the platform
- You can check fastboot support for Windows here
- Flash the bootloader
~$ fastboot flash bootloader u-boot.
For all platforms, you can use the copy_upgrade.sh
script to copy the bootable binary and the upgrade script to the root folder of your media (SD Card / USB / SATA drive).
~/u-boot/$ ./copy_upgrade.sh /
Plug your media to the platform, power up the board and interrupt u-boot to run the commands below (via the serial terminal).
Hit any key to stop autoboot: 0
=> run upgradeu
This will run the upgrade.scr
script and look for a file u-boot.${uboot_defconfig}
and burn it.
At this point it might be worthwhile to clear your environment variables after the first reboot.
This will set you up with the default environment variables and no more.
Hit any key to stop autoboot: 0
=> env default -a
=> savee
As a final note, if you've somehow managed to brick your board and need help, we already wrote a blog post here to assist.