uuu: the utility that flashes NXP i.MX boards over USB
Freescale/NXP I.MX Chip image deploy tools.
At a glance
- What is it?
- uuu, shipped as mfgtools, is the tool that puts a bootloader or a full disk image onto an i.MX board connected over USB, and it is the one most Linux developers meet for the first time when a board boots to nothing. It is a small C++ program with a handful of dependencies and a scriptable command file format.
- Who is it for?
- uuu fits anyone bringing up an i.MX board or reflash it in a lab loop, and anyone who wants the same flashing script to work on a Linux CI runner, a Windows bench and a macOS laptop. It does not fit a production fleet where flashing needs to be reproducible and audited, since it is a developer utility with an interactive shell mode and a raw command file format.
- Can I use it commercially?
- Yes. BSD-3-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 28 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The tool you reach for when the board is connected but blank
uuu is the Universal Update Utility, and the mfgtools 3.0 repository is its current home under the nxp-imx organisation. The job is narrow: deploy images to Freescale and NXP i.MX chips. The sample session in the README shows the shape of it, with the tool reporting how many devices succeeded and how many failed, then waiting for known USB devices to appear, then running SDP commands that jump into the ROM's serial download mode and boot a u-boot image. This is the point in a board bring-up where the device is enumerable over USB but has nothing runnable on it yet. The README notes that the original Linux version uses the linux branch and the Windows version uses the windows branch, and the key features list calls the tool a real cross platform one covering Linux, Windows and macOS, though macOS is marked as not tested yet. There is also multi device programming support and a daemon mode.
A command file, a shell, and a set of common invocations
The usage surface is small enough to read in full. Passing a .imx file downloads it over the HID device. Passing a list.uu file runs all the commands in it, which is the scriptable form and the one worth learning. The -s flag enters shell mode where you type commands interactively, -v turns on verbose output, and -d waits for a known device to appear and then downloads the image. The -b flag chooses a target, with emmc writing to the eMMC boot partition, which requires u-boot to have fastboot enabled, and emmc_all decompressing a wic.zst image and writing the whole thing into eMMC. The README also spells out two warnings for the SD card workflow: do not unplug the SD card, do not write to it, and do not plug one in when debugging u-boot. The example block shows the same commands with their explanations.
uuu u-boot.imx Download u-boot.imx via HID device
uuu list.uu Run all the commands in list.uu
uuu -s Enter shell mode. Input command.
uuu -v u-boot.imx verbose modebash
The list.uu format is what makes the tool scriptable, and the SDP lines in the sample session show what goes inside one, a jump command that loads the device tree and ramdisk and an ivtinitramf, and a boot command.
Three dependencies and a Windows driver caveat
The dependency list is short, which is a deliberate part of the design. The README names few dependencies, only libusb, zlib and libbz2, and the repository layout confirms it with the vendored directories for bzip2, libusb, tinyxml2, zlib and zstd alongside the libuuu and uuu source trees. On Windows the driver handling is the sharp edge. Firmware such as u-boot and the kernel uses WCID to auto load the WinUSB driver on the Windows side, and Windows 10 installs the driver automatically, but Windows 7 users need to install the WinUSB driver from the Zadig tool. If you are on Windows 7 and the board does not enumerate, that is the first thing to check. There is also a note about a failure to detach the kernel driver, where the advice is to check the libusb version.
Building it on the three platforms, and the CMake version split
Build instructions exist for Windows, Linux and macOS, and the Windows route is the Visual Studio solution, msvs/uuu.sln, opened with Visual Studio 2017 after cloning with submodules. The README makes a point about licensing here: since uuu is an OSI compliant open source project, you are entitled to download and use the freely available Visual Studio Community Edition to build, run or develop for it, and this applies whether you are an individual or a corporate user. On Linux you install the development packages and then run cmake and make, which builds in the source directory.
- `cmake . && make`bash
For an out of source build, which requires CMake 3.13 or newer, the commands are cmake -S . -B build followed by cmake --build build --target all. For CMake prior to 3.13 the older route is to make a build directory, change into it, and run cmake .. and make. The macOS instructions install cmake, libusb, openssl, pkg-config and tinyxml2 with brew, and point the OpenSSL root at the brew prefix, noting that the remaining libbz2 dependency comes from the libraries supplied with Xcode. The README assumes Homebrew is installed and used to resolve the dependencies.
Packaging, prebuilt images and a Snap
You do not have to build it. The README points at the releases page for prebuilt images and a PDF document, and UUU.pdf is described as a snapshot of the project wiki. On Ubuntu 22.04 the install is a single apt-get command. There is also a Snap package, universal-update-utility, and the repository has a snap directory to match. The CI setup covers all three platforms with separate workflows for macOS, for a Visual Studio build on Windows and for a build on Ubuntu. For run environments the README lists Windows 10 64 bit, Linux on Ubuntu 64 bit, and macOS Catalina, with a warning that 32 bit systems will have problems with big files. The repository also carries an SBOM.spdx.json file listing the component versions, which is the sort of thing a vendor-run supply chain is expected to provide, along with an appveyor.yml for the older Windows CI and a .travis.yml.
A library behind the tool, with Python bindings
uuu is not only an executable. The source is split into libuuu, which is the library layer, and uuu, which is the command line front end, and the repository also carries a wrapper directory with Python bindings for libuuu so the flashing functionality can be called from your own code rather than from a shell. That distinction matters for automation. A CI job that flashes boards in a fixture will want the library, not a fork of a subprocess invocation, and the Python bindings make that reachable without writing C. There is also a webusb directory in the repository, which suggests a browser-based path to the same hardware, and a Doxyfile.in for generated documentation alongside a CONTRIBUTING.md.
BSD licensed, with the LGPL libusb exception spelled out
The licence section is more detailed than most, and the detail matters for a tool that ships binaries. uuu is licensed under the BSD licence, and the README says the BSD licensed prebuilt Windows binary version of uuu is statically linked with the LGPL libusb library, which remains LGPL. So the binary you download is BSD but carries an LGPL component inside it. The rest of the vendored code is listed with its own licences: bzip2 under the BSD licence, zlib under the zlib licence, libusb under LGPL-2.1, zstd under dual BSD and GPLv2 licences, and tinyxml2 under the zlib licence, each with its upstream repository. The repository licence is BSD-3-Clause as classified by GitHub. The release history shows rolling tags named after the tool, uuu_1.5.243 from December 2025 and uuu_1.5.239 from November 2025, alongside a rolling master release, and the last push was on 2026-09-25.
Editorial conclusion
uuu fits anyone bringing up an i.MX board or reflash it in a lab loop, and anyone who wants the same flashing script to work on a Linux CI runner, a Windows bench and a macOS laptop. It does not fit a production fleet where flashing needs to be reproducible and audited, since it is a developer utility with an interactive shell mode and a raw command file format. Verify first that your board enumerates over the mode uuu expects, check the driver situation on Windows 7 before you start, and prefer the packaged uuu from your distribution or the prebuilt images over building it unless you need to change something.
Frequently asked questions
How do I flash an NXP i.MX board with uuu?
Connect the board over USB and pass the image, for example uuu u-boot.imx to download it via the HID device. The -d flag waits until a known device is detected and then downloads, -b emmc writes to the eMMC boot partition, and -b emmc_all decompresses a wic.zst image and writes the whole thing into eMMC.
How do I install uuu on Linux?
On Ubuntu 22.04 the README gives apt-get install uuu. To build it instead, clone the repository, install the development packages including libusb, zlib, bzip2 and tinyxml2, and run cmake . && make. Prebuilt images and the UUU.pdf document are on the releases page.
Why does my board not enumerate on Windows 7?
The README explains that firmware uses WCID to auto load the WinUSB driver on Windows, and that Windows 10 installs the driver automatically while Windows 7 users need to install the WinUSB driver from Zadig. It also notes that a failure to detach the kernel driver can be a libusb version issue.
Can I call uuu from Python?
Yes. The README states that Python bindings for libuuu are provided to enable integration of the functionality into your own code, with more information in the wrapper directory of the repository.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/nxp-imx-mfgtools)Was this useful?