The firmware in this repository is a port of DualTachyon's code for both V1 & V2 hardwares.
To date, most of the work has focused on compatibility with the V2 hardware, which is now largely complete. Regarding application features, I'm taking a conservative approach for now. The current plan is to keep things as bare-bones as possible, staying close to the original functionality and design of the Quansheng firmware. There won't be any fancy new features, such as backlight brightness adjustment.
I privately ported the egzumer firmware to the hardware driver layer of this repo. It runs well, although I'm having trouble reducing the firmware size to fit in the 60 KB flash while retaining common functionalities. If you have some crazy ideas want to realise on V2 hardware, don't wait for me—just get started yourself. On that I hope this repo will be helpful.
As I understand it, the firmware version for Quansheng radios follows the format m.nn.vv
.
Here, m.nn
represents the model version, which can essentially be understood as the hardware version.
Some real model versions, based on my experience, are:
- K5 V1: 2.00, 3.00
- K5 V2: 1.01
- K6 V2: 1.02
The vv
portion, consisting of two digits, denotes the firmware/software version.
I generally follow this convention, though with a slight adjustment to the common practice of incrementing version numbers starting from 01. Specifically,
- Until it is decent enough (stable and complete in functionality), the version number will use "large" numbers, such as starting from 99 and descending to 98, 97, etc
- The "decent" releases will begin from 01 and go upward as usual
- Unless there's any other reason, the model version remains at 1.01
There's a serialtool
directory at the repo root, which contains a Python CLI tool that can be used to flash firmware to radios,
dump or restore configuration and / or calibration data.
To perform flashing you can execute the command like this:
python serialtool/cli.py flash --port /dev/ttyUSB0 --bl-ver 1.01 build/Release/k5_v2_fw1-1.0.97.bin
Here, /dev/ttyUSB0
is the serial port device. I believe on the Windows platform it should be something like COM1, COM2 and so on.
The --bl-ver
option specifies the model version as mentioned ealier. It must match the device's version.
build/Release/k5_v2_fw1-1.0.97.bin
is the firmware image, such as generated by the build process. We talk about it soon.
Execute the command with -h
option to view detailed usage:
python serialtool/cli.py -h
Requires CMake, Ninja or make, along with GCC for building.
You can build the project with
cmake -B build/ --preset Release && \
cmake --build build/
Or with docker:
docker build -t k5_fw1 .
docker run --rm -it -v "$(pwd):/repo" k5_fw1
Let's use github Discussions.
My work is built upon the following projects. To the wonderful authors I extend my deepest gratitude:
- https://github.com/mentalDetector/Quansheng_UV-K5_PCB_R51-V1.4_PCB_Reversing_Rev._0.9
- https://github.com/DualTachyon/uv-k5-firmware
- https://github.com/ludwich66/Quansheng_UV-K5_Wiki
Third-party softwares and their copyright information are recorded in third_party_licenses.md
Copyright 2025 muzkr
https://github.com/muzkr
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.