Skip to content

Booting from USB using UUU (Universal Update Utility)

Introduction

UUU is a small tool from NXP used to boot and flash i.MX boards over USB. Think of it as a simple "USB installer" for the board. More details: https://github.com/NXPmicro/mfgtools

Note: Variscite boards already ship with a bootloader in the internal storage. UUU is optional, but useful when you want to reflash the board from a PC.

Step by step usage instructions

1. Install UUU on the host PC

sudo apt-get install libusb-1.0-0-dev libbz2-dev libzstd-dev pkg-config cmake libssl-dev g++
cd ~
git clone https://github.com/NXPmicro/mfgtools.git
cd mfgtools
git checkout uuu_1.5.243
cmake .
make

Warning: The uuu_script generated by Variscite's UUU installer package uses the -bmap option. Use uuu_1.5.163 or newer for -bmap support (the example above uses a newer tag).

2. Build the UUU installer package (Yocto)

Select the Image Used by the Installer

The var-uuu-installer recipe uses the var-uuu-installer.bbclass class to pick the rootfs image and generate the uuu_script. The class expects a rootfs base name that matches files in tmp/deploy/images/<machine>/:

  • <image>-<machine>.rootfs.wic
  • <image>-<machine>.rootfs.wic.bmap

Set the image in conf/local.conf:

# Image used by the UUU installer
VAR_FLASH_IMAGE_NAME = "fsl-image-qt5"

If VAR_FLASH_IMAGE_NAME is not set, the class defaults to fsl-image-gui-chromium.

bitbake var-uuu-installer

The installer tarball is created here:

./tmp/deploy/images/imx8mp-var-dart/var-uuu-installer-imx8mp-var-dart.tar.zst

3. Put the board in USB download mode

Set the boot-mode switch as described in yocto-build-release (SD boot with no SD card inserted). Connect the board to the PC using the USB OTG port and power it on.

If your board only has a regular USB type-A connector, use a "male USB type-A to male USB type-A" cable.

4. Extract and run the installer

tar --use-compress-program=unzstd -xf ./tmp/deploy/images/imx8mp-var-dart/var-uuu-installer-imx8mp-var-dart.tar.zst -C ~
cd ~/uuu-installer
sudo uuu -b uuu_script

Set the boot selection switch to eMMC and reboot. The board should now boot from eMMC.