Re-flashing the controller
Re-flashing installs a complete Linux image on a Moduline M1, L4 or HMI1 controller and replaces all software on it. You download the zip file for your controller, start the controller in USB boot mode and flash it with UUU from NXP on a Windows or Linux computer. This page also covers a kernel-only update.
The steps are the same for the three controllers. Where a value differs, it is given for each controller. Linux images describes what the current release contains.
On this page
- Downloading the image
- Installing UUU
- Starting the controller in USB boot mode
- Flashing the full image
- After flashing
- Updating only the kernel
Note: flashing the full image replaces all software and data on the controller, including your application and its settings. Copy what you want to keep before you start. The serial number is kept, except on older controllers that kept it in the last sector of their internal memory; After flashing shows how to check it. If the controller still starts, write the serial number down first with go-sn read: without a GOcontroll housing, there is no label with it.
Downloading the image
The images are on the GOcontroll download portal at images.gocontroll.tech. To sign in, enter your e-mail address and ask for the link. The link in the e-mail works for 60 minutes. Once you open it, you have access to the downloads on that device for 7 days.
For each controller there is one zip file with everything UUU needs: the full image, and a script inside it that updates only the kernel. You flash the zip file as it is; there is no need to unpack it. Use the file of the newest release on the portal.
The name of each zip file starts with the variant of your controller:
- Moduline M1, hardware version 1.11:
moduline-m1-111 - Moduline L4, hardware version 3.06 rev. D:
moduline-l4-306-d - Moduline HMI1, hardware version 1.06, display adapter board AV101:
moduline-hmi1-106-av101 - Moduline HMI1, hardware version 1.06, display adapter board AV123:
moduline-hmi1-106-av123 - Moduline HMI1, hardware version 1.07, display adapter board AV101:
moduline-hmi1-107-av101 - Moduline HMI1, hardware version 1.07, display adapter board AV123:
moduline-hmi1-107-av123
The variant is followed by the release, for example moduline-m1-111_<release>.zip for a Moduline M1.
You read the hardware version, and on the Moduline HMI1 the display adapter board, from the circuit boards inside the controller. Opening/closing the controller describes how to open it. In a controller with a GOcontroll housing, look here:
- Moduline M1: at the bottom right of the circuit board, in the text block with the hardware version (HW V…).
- Moduline L4: at the top right of the circuit board, in the text block with the hardware version (HW V…).
- Moduline HMI1, hardware version: at the bottom right of the baseboard, next to the two matrix codes, in the text block with the hardware version, for example HW V1.07.
- Moduline HMI1, display adapter board: at the very top of the adapter board, above the GOcontroll logo, in small letters, for example DISPLAY ADAPTER FOR BOE AV101HDT-A10-28PE V1.01 on an AV101 board.
In a controller without a GOcontroll housing, the boards can look different.
The zip files are made for the hardware versions in the list of variants above. For an older controller, please contact [email protected].
The portal shows the SHA-256 checksum of each file and the command to check it. If the checksum of your download differs, the file is incomplete or damaged: download it again and do not flash it.
Installing UUU
The zip files are flashed with UUU, the Universal Update Utility of NXP. GOcontroll does not supply UUU: download it from the mfgtools releases of NXP. The zip files are tested with UUU version 1.5.243.
For a Windows computer, download uuu.exe. For a Linux computer, download uuu and make it executable:
chmod +x uuu
On Linux, UUU needs access to the controller over USB. To run it without sudo, install the udev rule of UUU once. This command prints the two commands that do that:
./uuu -udev
Starting the controller in USB boot mode
The boot pins are on the circuit board inside the controller, so you have to open the controller. Opening/closing the controller describes how.
You need:
- An M12 to USB cable, see USB.
- The M12 connector must be configured for USB and not RS232. The RS232 configuration is very uncommon, so this should generally be the case.
- Something to bridge the boot pins, for example fine metal tweezers.
- A supply for K30 and K15 within the limits on Supply voltage.
The boot pins are two vias, small holes in the circuit board, that you connect to each other:
- Moduline M1: marked BOOT, between the reset button and the connector that goes to the M12 connectors.
- Moduline L4: marked with a line of text, between the compute module and the Wi-Fi module.
- Moduline HMI1: not marked, but with a white outline around them, right next to the reset button.

To start the controller in USB boot mode:
- Connect the M12 to USB cable to the controller first and then to your computer. USB connections explains why this order matters.
- Bridge the boot pins and keep them bridged.
- Switch on K30 and K15.
Note: keep K30 and K15 switched on during the whole procedure, until UUU has finished.
Flashing the full image
Your computer needs about 2.5 GB of free memory for this, because UUU unpacks the image in memory while it flashes.
On a Windows computer, put uuu.exe and the zip file of your controller in one folder, and open PowerShell in that folder. On Windows 11, right-click an empty space in the folder in File Explorer and select Open in Terminal. On Windows 10, start PowerShell and go to that folder. Then run:
.\uuu.exe <variant>_<release>.zip
On a Linux computer, open a terminal in the folder with uuu and the zip file, and run:
./uuu <variant>_<release>.zip
Use the exact name of the file you downloaded, for example moduline-m1-111_<release>.zip for a Moduline M1.
UUU waits for the controller and then writes the partition table, the bootloader, the Linux kernel and the root file system to the internal memory of the controller. This takes several minutes. Wait until UUU has finished and reports no errors: a successful run ends with a status line that shows Success 1 and Failure 0. Then:
- Switch off K30 and K15.
- Remove the bridge from the boot pins.
- Close the controller.
- Switch on K30 and K15. The controller starts the new image.
After flashing
After flashing the full image, these steps make the controller complete again. To use the command line interface, a wired ethernet and/or Wi-Fi connection is mandatory. Log in as described in SSH terminal.
Serial number. Check the serial number of the controller:
go-sn read
This must show the serial number of your controller. With a GOcontroll housing, the serial number is on the label of the housing; without one, use the number you wrote down before flashing. An older controller that kept its serial number in the last sector of its internal memory loses it on its first full flash. If go-sn read reports No serial number programmed, or shows another number, write the serial number. It has four groups of four characters, separated by dashes:
go-sn write <serial number>
For example:
go-sn write 1234-5678-9012-3456
Wi-Fi access point. Only on a controller with the Wi-Fi hardware option. After flashing, the access point is called GOcontroll-AP-fresh. This command gives it its default name again, GOcontroll-AP- followed by the second group of the serial number:
go-reset-ap
go-reset-ap takes the name from the serial number, so check the serial number first. It replaces all Wi-Fi connections on the controller with the default access point. The access point settings are described in Wi-Fi configuration.
Package lists. The image ships without package lists. Before you install a package, fetch them once:
apt-get update
apt packages describes how to install and update the GOcontroll packages.
Backlight. Only on the Moduline HMI1. The backlight starts at 0, so the screen stays dark until your application sets the brightness. Your application sets it by writing a value from 0 to 100 to /sys/class/backlight/max25014/brightness. The boot splash of the GOcontroll HMI demo shows an example in splash/src/splash_backlight.c.
Passwords. The controller has its default passwords again. To change them, see Secured login.
Updating only the kernel
If your controller already runs Linux kernel 6.12.87 with Falcon Mode, you can update only the kernel. Your application, its settings and your data stay on the controller, and so do the serial number, the access point and the apt repository setup. When in doubt, flash the full image.
Check this first, because a controller with an older image keeps boot data where the kernel-only update writes. Log in to the controller and run these four commands. Each one must give the result below it.
uname -r
The output must be 6.12.87+.
grep -a -o -m1 'U-Boot 20[0-9.]*-[^)]*)' /dev/mmcblk0boot0
The output must start with U-Boot 2020.04-26039-gfc4bde81496.
ls /dev/disk/by-partlabel
The output must list root and serial.
od -A n -t x1 -N 4 -j 4063232 /dev/mmcblk0
The output must be d0 0d fe ed.
If one of the results is different, or you are not sure, flash the full image instead.
For this update you use the same zip file as for the full image, but you start the script kernel.auto inside it. That script writes only the kernel and its boot arguments.
Note: type the command exactly as shown, with \kernel.auto after the name of the zip file (on Linux /kernel.auto). Without it, UUU flashes the full image, and all software and data on the controller are lost.
Start the controller as described under Starting the controller in USB boot mode. On a Windows computer, open PowerShell in the folder with uuu.exe and the zip file, as for the full image, and run:
.\uuu.exe <variant>_<release>.zip\kernel.auto
On a Linux computer, run:
./uuu <variant>_<release>.zip/kernel.auto
Wait until UUU has finished and reports no errors. Then:
- Switch off K30 and K15.
- Remove the bridge from the boot pins.
- Close the controller.
- Switch on K30 and K15. The controller starts with the new kernel.
On the Moduline HMI1, the backlight note under After flashing also applies.
Also see
- Linux images – what the current release contains
- Opening/closing the controller – how to reach the boot pins
- USB connections – the order in which you connect the USB cable
- USB – the M12 to USB cable
- SSH terminal – logging in to the controller
- Wi-Fi configuration – the settings of the access point
- apt packages – the GOcontroll packages and their latest versions
