September 5, 2017

U-Boot v2017.07 for i.MX platforms

We’re glad to release the latest U-Boot v2017.07 with support for all our platforms:

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.

Also, the up-to-date 6x_upgrade/upgrade.scr U-Boot scripts are included so you can copy all the files directly to the root of your media storage.

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

Make sure to re-initialize your U-Boot environment after flashing the new binary in order to leverage the new feature, see flashing procedure.

What’s new?

Wait what, already a new release?

Yes, although there isn’t much to say feature-wise, there is a lot of differences to note with this release!

Goodbye 6x_bootscript!

That’s probably the most noticeable change, this release marks the end of the 6x_bootscript as we know it today.

The reason is simple, 6x_bootscript (formerly 6q_bootscript) was introduced back in 2012 when there was no standard for booting an OS.

Since then, U-Boot included such standard:

The default bootscript name is now boot.scr for any OS which makes much more sense that our 6x_bootscript that wasn’t only for i.MX6x any more.

  • So is boot.scr just a renamed version of 6x_bootscript?

No, not exactly, our previous bootcmd was done manually with our own variable naming convention.

If we want to be standard, we need to change variables to match the new convention.

  • So a new U-Boot won’t be able to boot older OS images using 6x_bootscript?

We still want our customers to have a plug & play experience so we will keep some legacy support of 6x_bootscript which means that older images will boot just fine.

BUT, our goal is to get rid of that legacy support at some point in the future.

  • Any other interesting facts due to that change?

Yes, 2 of them:

  1. The new bootcmd looks for boot.scr/6x_bootscript in different locations now:
    • Both / and /boot/ are looked into
  2. All the bootscripts are now located under their own folder instead of Nitrogen6x one:

Any other noticeable change?

One update is the display support for both Nitrogen6SX and Nitrogen7 which was previously missing.

Then the rest of the changes is mostly a refactoring of the source code.

All our boards share a common architecture, so the idea was to create a common folder containing everything shared across all platforms:

This includes Ethernet PHY initialization, pad control definition and default configuration for DDR & clocks.

Although this refactoring doesn’t change anything for a given platform, it reduces its board file quite a bit.

Build instructions

The usual compilation disclaimers apply for this. It is highly recommended to use the gcc-arm-linux-gnueabihf package available on Ubuntu/Debian.

~$ sudo apt-get install gcc-arm-linux-gnueabihf

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-v2017.07
~$ cd u-boot-imx6

Here you’ll need to find and make the relevant defconfig for your board.

If you are using a U-Boot >=2015.07, then at the U-Boot prompt 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 . -name "nit*defconfig"
./configs/nitrogen6_vm1g_defconfig
./configs/nitrogen6q2g_defconfig
./configs/nitrogen6dl2g_defconfig
./configs/nitrogen6s1g_defconfig
./configs/nit6xlite_defconfig
./configs/nitrogen6q_fl_defconfig
./configs/nitrogen7_defconfig
./configs/nitrogen6q_som2_2g_defconfig
./configs/nitrogen6sx_defconfig
./configs/nitrogen6dl_defconfig
./configs/nitrogen6q_defconfig
./configs/nitrogen6s_defconfig
./configs/nitrogen6_lum_dl1_defconfig
./configs/nitrogen6_vm_defconfig
./configs/nitrogen6q_som2_1g_defconfig
./configs/nitrogen6q_som2_4g_defconfig
./configs/nit6xlite1g_defconfig
./configs/nitrogen6qp_max_defconfig
./configs/nitrogen6_max_defconfig

 Now compile that defconfig, here I’ll use nitrogen6q_defconfig as an example.

~/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

Flashing procedure

Now you’ll have a u-boot.imx file compiled. The copy_upgrade.sh can be used to rename the u-boot.imx file to u-boot.{uboot_defconfig} and move that and the upgrade scripts 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.

If your u-boot prompt is “U-boot >” then you need to set uboot_defconfig to the value that matches your platform.

Here is an example for Nitrogen6x/BD-SL-i.MX6:

Hit any key to stop autoboot:  0 
U-Boot > setenv uboot_defconfig nitrogen6q
U-Boot > run upgradeu

Otherwise just run:

Hit any key to stop autoboot:  0
=> run upgradeu

This will run the 6x_upgrade or 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, 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.