This article describes how to update u-blox GNSS receiver firmware on Linux using the Firmware Update Tool. The steps below outline a common Linux firmware update workflow for u-blox GNSS products and include additional guidance for F9, F20, and X20 modules. See the tool's built-in --help output for the complete set of command-line options.
Build the Tool
Unzip the Firmware Update Tool archive, and use the provided Makefile to build the tool, e.g.
unzip -q firmwareUpdateTool_<version>.zip
cd firmwareUpdateTool_<version>32-bit build:
make
64-bit build (recommended on 64-bit systems):
make external64
If the build fails with linker errors such as undefined reference to malloc, free, or strcmp, rebuild using:
make external64 LD=cc
Get the new firmware file
Download the required module firmware .bin file from the u-blox website (under the module's Documentation & Resources section) or obtain it from your u-blox representative.
Identify the Communication Interface
The Firmware Update Tool supports multiple communication interfaces. Identify the communication interface used by your receiver before proceeding.
List available serial devices:
ls -l /dev/serial/by-id/Alternatively:
ls /dev/ttyUSB* /dev/ttyACM* 2>/dev/null
Important:
- F20/X20: Firmware updates are recommended over UART1, although USB serial updates are also supported.
-
USB serial updates: The receiver may re-enumerate when entering safeboot mode, causing it to appear as a different serial device. For the most reliable update experience, place the receiver into safeboot mode before starting the Firmware Update Tool, reconnect the receiver, identify the safeboot serial device, and run the update using that device. Since the receiver is already in safeboot mode, omit the
-s 1argument when running the Firmware Update Tool.
Example UART1 device paths:
/dev/serial/by-id/usb-u-blox_AG_X20P_UART1_<serial>-if00-port0 /dev/serial/by-id/usb-u-blox_AG_C099__ZED-F9P_<serial>-if00-port0
Verify Receiver Communication
- Verify communication with the receiver and record the current firmware version before performing the update.
- u-blox F9, F20, and X20 products support the UBX-MON-VER message, which reports the currently installed firmware version.
- Poll UBX-MON-VER using your preferred tool or script and record the reported firmware version before updating. Refer to your module's Interface Description documentation for details on generating and sending UBX-MON-VER poll messages.
-
Example output:
swVersion HPG 1.51 hwVersion 00190000 FWVER=HPG 1.51 PROTVER=27.12 MOD=ZED-F9P
Run the Firmware Update
Note: The commands shown in this article are intended as examples and may require modification for your specific module, firmware version, interface, or Linux environment. Refer to the tool's --help output for all options.
-
Run the firmware update
bin/ubxfwupdate_64 -p <UART_PATH> -b 38400:9600:460800 --no-fis 1 -C 1 -s 1 -t 1 -v 1 <firmware_file.bin>
Replace
<UART_PATH>with the UART1 device identified on your system. Replace<firmware_file.bin>with the target firmware image name.Note: The example command assumes the receiver is currently configured to communicate at
38400bps on UART1, which is the default for many u-blox products. If the UART baud rate has been changed, update the first value in the-bparameter accordingly. - Users who built the 32-bit version should replace
ubxfwupdate_64withubxfwupdate. - Wait for the update to complete. Do not disconnect power or communication interfaces while the update is in progress.
- Poll UBX-MON-VER again and verify that the expected firmware version is installed.
Troubleshooting
Some Linux distributions may not automatically expose the UART interfaces used by F20 and X20 products. If a UART1 interface is not available, refer to the Linux UART Interface Troubleshooting guide.
For additional command-line options, and usage examples, refer to the tool's --help.