September 5, 2018

U-Boot v2018.07 for i.MX platforms

Boundary Devices is happy to release the latest U-Boot v2018.07 with support for all our Nitrogen Families of SBCs and SOMs. The new update includes support for the Nitrogen8M (i.MX8), MIPI display support, as well as Driver improvements:

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 of this build images.

For those not sure about which binary to download, here is a quick summary for our boards:

The latest upgrade.scr U-Boot script is included so it can be copied alongside the U-Boot binary above to the root of your media storage (formatted in FAT or ext2/3/4).

Then, once the media is inserted into the board, you can simply run the following command from U-Boot prompt:

=> run upgradeu

If unsure about this shorten procedure, please make sure to read the flashing procedure section.

What’s new?

i.MX8M support

The big news of this release is that it supports all our boards including the Nitrogen8M based on i.MX8MQ CPU.

Just like the kernel branch 4.9.x_2.0.0 it is much better to have all the platforms using the same source code.

Display configuration support

Previous U-Boot versions supported LVDS and HDMI display configuration for i.MX6/7 boards.

This version now also supports MIPI display, required for i.MX8M-based platforms.

Here is an example on how to set up the board to use our BD080MCC1 MIPI display.

=> setenv fb_mipi ltk080a60a004t
=> savee
=> reset

Driver improvements

Although no exhaustive list of changes is available between v2017.07 and v2018.07, we know many drivers have been improved.

For instance USB support (and especially USB3.0) is much better with v2018.07.

But mmc and net drivers also receive their share of improvements during last year of U-Boot development.

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-imx6 \
    -b boundary-v2018.07
~$ cd u-boot-imx6

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-imx6$ find configs/ -name "nit*defconfig"
configs/nit6xlite_defconfig
configs/nitrogen6_max_defconfig
configs/nitrogen6q_defconfig
configs/nitrogen6q_som2_1g_defconfig
configs/nitrogen6sx_defconfig
configs/nitrogen6_vm_defconfig
configs/nitrogen7_defconfig
configs/nitrogen8m_defconfig
...

Building for i.MX6/7

Now compile that defconfig. For 32-bit platforms, we’ll use nitrogen6q_defconfig as an example.

~/u-boot-imx6$ sudo apt-get install crossbuild-essential-armhf
~/u-boot-imx6$ export ARCH=arm
~/u-boot-imx6$ export CROSS_COMPILE=arm-linux-gnueabihf-
~/u-boot-imx6$ make nitrogen6q_defconfig
~/u-boot-imx6$ make -j2

Building for i.MX8

For 64-bit platforms, we’ll use nitrogen8m_defconfig as an example.

~/u-boot-imx6$ sudo apt-get install crossbuild-essential-arm64
~/u-boot-imx6$ export ARCH=arm64
~/u-boot-imx6$ export CROSS_COMPILE=aarch64-linux-gnu-
~/u-boot-imx6$ make nitrogen8m_defconfig
~/u-boot-imx6$ make -j4

However, for i.MX8MQ, building U-Boot is not sufficient to create a bootable image.

Indeed you need to use imx-mkimage for it to combine U-Boot binaries with the HDMI/DDR blobs as well as imx-atf.

Here is a quick procedure to create the bootable image:

~$ git clone https://github.com/boundarydevices/imx-mkimage.git
~$ cd imx-mkimage
~/imx-mkimage$ UBOOT_PATH=~/u-boot-imx6/ ./make_boundary.sh

At this point, you can rename the bootable image from flash.bin to u-boot.${uboot_defconfig}

~/imx-mkimage$ mv iMX8M/flash.bin ~/u-boot-imx6/u-boot.nitrogen8m

Flashing procedure

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-imx6/$ ./copy_upgrade.sh <mount_path>/

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 worth while 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

Then as a final note, if you’ve somehow managed to brick your board through this process and need help. Well, we already wrote a blog post here about that topic.