This article describes how to update firmware on u-blox GNSS receivers using the Linux 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. Complete usage instructions and advanced options are available in the included README.md documentation and the tool's built-in --help output.
Build the Tool
Open a terminal in the tool's root directory containing the Makefile and build the firmware update utility. This is typically the inner firmwareUpdateTool directory within the extracted package.
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
Note: This workaround may be required on some Linux distributions if the build fails during the linking stage with undefined reference errors.
Verify the Build
Navigate to the bin directory and confirm that the executable was created.
32-bit output: ubxfwupdate
64-bit output: ubxfwupdate_64
Prepare Required Files
- Download the required module firmware
.binfile from the u-blox website (under the module's Documentation & Resources section) or obtain it from your u-blox representative. - Copy the firmware file into a convenient location or note its full path for later use. Alternatively, the firmware file may be copied into the
bindirectory containing the firmware update utility.
Identify the Communication Interface
The Linux 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 included README.md documentation for complete details.
-
Navigate to the
bindirectory:cd bin
-
Run the firmware update:
./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. If the firmware file is not located in thebindirectory, provide the full path to the file.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.
-
Display the built-in help information:
./ubxfwupdate_64 --help
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.
For additional command-line options, troubleshooting information, and advanced usage examples, refer to the included README.md documentation and --help.