UUU - Universal Update Utility¶
The Universal Update Utility is used to program your board. It repaces NXP’s “MFG-Tool”. We actually use uuu
to flash our TX8M module series. For everything below (TX6 and TXUL series) please continue to use MFG-Tool.
Getting uuu¶
Get the latest stable file uuu
(for Linux) or uuu.exe
(for Windows) from NXP’s official repository: https://github.com/NXPmicro/mfgtools/releases
udev Rules¶
Note
This is just relevant for LINUX users.
There’s no need to call uuu
as sudo. Just update your udev rules as follows.
SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="012f", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0129", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0147", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="004f", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="013e", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0146", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="014a", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="014b", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0076", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0054", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0061", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0063", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0071", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="007d", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0080", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0128", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0126", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0135", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0134", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="012b", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0525", ATTRS{idProduct}=="b4a4", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0525", ATTRS{idProduct}=="b4a4", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0525", ATTRS{idProduct}=="b4a4", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="3016", ATTRS{idProduct}=="1001", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="3016", ATTRS{idProduct}=="1001", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="066f", ATTRS{idProduct}=="9afe", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="066f", ATTRS{idProduct}=="9bff", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0525", ATTRS{idProduct}=="a4a5", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="0d02", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="3016", ATTRS{idProduct}=="0001", TAG+="uaccess"
Put above udev run into /etc/udev/rules.d/70-uuu.rules and update udev-rules.
This can be achieved running the following two commands:
sudo sh -c "uuu -udev >> /etc/udev/rules.d/70-uuu.rules"
sudo udevadm control --reload
Usage¶
UUU uses the android fastboot protocol. The usual way to flash our modules is to start the mfg-uboot, write the default u-boot into eMMC and then flash the Boot-partition and Rootfs as filesystem image.
Tip
You can use pre-compiled images and scripts from our Customer Area or your own Yocto built images.
Running uuu¶
On Windows 10 or Linux uuu will work fine. For Windows 7 see Running UUU on Windows 7.
- Put the bootmode jumper in place (for Help see Enabling USB-Bootmode) and connect your module via OTG-programming port of the baseboard.
- Get terminal access. If you need help for this see TTL Converter Terminal Connection.
- Open a command line inside the folder where uuu is and run the following command to use the before created script:
uuu -v <script-file>
Tip
Inside your terminal you should now see progress and information while uuu is programming your module.
UUU with Custom Files¶
Creating Filesystems¶
For e.g. the /boot partition you can create an own filesystem image. The example below gives you an idea how this is done.
It also shows you how existing filesystems can be mounted.
dd if=/dev/zero of=bootfs.fat bs=1M count=0 seek=32
mkfs -t vfat bootfs.fat
sudo mount -o loop bootfs.fat /mnt/temp/
sudo cp Image imx8mn-tx8m-nd00-mipi-mb.dtb /mnt/temp/
sudo umount /mnt/temp
Script Examples [1]¶
Hint
Some commands differ depending on the module you are using.
Module | Loading bootloader command-set | Comments |
---|---|---|
tx8m-1610 | SDP: boot -f <mfg-uboot>
SDPV: write -f <mfg-boot> -offset 0x57c00
SDPV: jump
|
|
tx8m-1620 | SDP: boot -f <mfg-uboot>
SDPV: write -f <mfg-boot> -offset 0x57c00
SDPV: jump
|
|
tx8m-nd00 | SDPS: boot -f <mfg-uboot>
SDPV: write -f <mfg-boot> -offset 0x57c00
SDPV: jump
|
UUU has a problem recognizig the
device at the first start - you will
see an error. After this just run
uuu -v again and it will work.
You can also start uuu in Daemon
mode uuu -v -d to prevent this. |
tx8p-ml81 | SDPS: boot -f <mfg-uboot>
|
|
qsxp-ml81 | SDPS: boot -f <mfg-uboot>
|
|
qsxm-mm60 | SDP: boot -f <mfg-uboot>
SDPV: write -f <mfg-boot> -offset 0x57c00
SDPV: jump
|
|
qs8m-mq00 | SDP: boot -f <mfg-uboot>
SDPV: write -f <mfg-boot> -offset 0x57c00
SDPV: jump
|
|
qs8m-nd00 | SDPS: boot -f <mfg-uboot>
SDPV: write -f <mfg-boot> -offset 0x57c00
SDPV: jump
|
UUU has a problem recognizig the
device at the first start - you will
see an error. After this just run
uuu -v again and it will work.
You can also start uuu in Daemon
mode uuu -v -d to prevent this. |
Flashing U-Boot to eMMC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | uuu_version 1.0.1
#
# author: Markus Bauer <mb@karo-electronics.de>
# (c) 2019
#
# This file flashes default u-boot to your TX8M
### boot uboot with fastboot support
SDPS: boot -f imx-boot-tx8m-nd00-mipi-mb-mfg.bin-flash_tx8m
SDPV: delay 1000
SDPV: write -f imx-boot-tx8m-nd00-mipi-mb-mfg.bin-flash_tx8m -offset 0x57c00
SDPV: jump
### Writing default u-boot to emmc
FB: ucmd setenv emmc_dev 0
FB: ucmd setenv fastboot_dev mmc
FB: ucmd setenv mmcdev ${emmc_dev}
FB: ucmd mmc dev ${emmc_dev}
FB: flash bootloader imx-boot-tx8m-nd00-mipi-mb-default.bin-flash_tx8m
FB: ucmd mmc partconf ${emmc_dev} 1 1 0
FB: done
|
Flashing filesystems
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | uuu_version 1.0.1
#
# author: Markus Bauer <mb@karo-electronics.de>
# (c) 2019
#
# This file flashes desktop release (QT from Yocto) and bootfs to your TX8M
### Boot our uboot with fastboot support
SDPS: boot -f imx-boot-tx8m-nd00-mipi-mb-mfg.bin-flash_tx8m
SDPV: delay 1000
SDPV: write -f imx-boot-tx8m-nd00-mipi-mb-mfg.bin-flash_tx8m -offset 0x57c00
SDPV: jump
### GPT partition layout
#
# 32M /boot
# MAX /
FB: ucmd setenv partitions 'uuid_disk=${uuid_gpt_disk};name=boot,size=32M,start=1MiB,uuid=${uuid_boot};name=rootfs,size=MAX,uuid=0cc66cc0-5458-384d-1610-726f6f746673;'
FB: ucmd gpt write mmc 0 ${partitions}
### force re-read partition table
FB: ucmd setenv fastboot_dev sata
FB: ucmd setenv fastboot_dev mmc
### Flashing partitions
FB: flash boot bootfs.fat
FB: flash -raw2sparse rootfs fsl-image-qt5.rootfs.ext4
FB: done
|
Note
Run man fastboot
on your host to see which possibilities you have with FB:
command in uuu.
Importing environment
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | uuu_version 1.0.1
#
# author: Markus Bauer <mb@karo-electronics.de>
# (c) 2019
#
# This file imports u-boot environment file.
# The entries into the file look like:
#
# append_bootargs=quiet
# {variable}={value}
# ...
#
# The file has to end with a ZERO byte.
### Boot our uboot with fastboot support
SDPS: boot -f imx-boot-tx8m-nd00-mipi-mb-mfg.bin-flash_tx8m
SDPV: delay 1000
SDPV: write -f imx-boot-tx8m-nd00-mipi-mb-mfg.bin-flash_tx8m -offset 0x57c00
SDPV: jump
### Importing u-boot environment
FB: ucmd setenv fastboot_buffer ${loadaddr}
FB: download -f emmc-boot.env
FB: ucmd env default -a
FB: ucmd env import ${loadaddr}
FB: ucmd printenv
FB: ucmd saveenv
FB: done
|
[1] | Further information about uuu, and the official documentation can be found in uuu.pdf |