For the past few weeks, I’ve been working with a small team on a project that I think could become a real game-changer for amateur radio: LinHT. It’s a Linux-based, SDR handheld transceiver, designed as a true open-source alternative to the locked-down radios we’ve all been buying from the big manufacturers.
This project is part of the M17 Foundation effort, and while its roots are in the M17 digital voice protocol, LinHT is not tied to a single mode. Thanks to GNU Radio running directly on the radio, you’ll be able to experiment with FM, AM, SSB, TETRA, FreeDV, packet, and of course M17 – all in one device that fits in your hand.
What’s M17?
If you haven’t heard about M17 yet, it’s an open digital voice and data protocol for VHF/UHF amateur bands. Think of it as a community-driven alternative to DMR, D-Star, or System Fusion – but with open documentation, codecs, and implementations.
For now, M17 is still relatively niche, but it’s gaining momentum. Having a dedicated handheld with M17 support out of the box will make it a lot easier for more hams to try it, without resorting to hotspot boxes, Raspberry Pis, or reflashed commercial gear.
From OpenHT to LinHT
Some of you might remember the earlier OpenHT project – an attempt to build an open-source handheld using an FPGA. It was ambitious, but ultimately too complex and expensive to move forward.
LinHT is the spiritual successor. This time, all the unnecessary complexity was was striped away and we focused on what really matters: a practical, affordable SDR handheld that can be built and used by the community. No FPGA, no exotic parts – just a SoM running Linux and an SDR front-end.
What is LinHT?
LinHT (Linux Handheld Transceiver) is our attempt to take the flexibility of SDR and bring it into a form factor radio amateurs actually use every day: a handheld. Instead of another black-box HT with proprietary firmware, LinHT runs a full Linux system on an NXP i.MX93 SoM, with GNU Radio as the DSP engine.
- The RF front-end is based on the Semtech SX1255 – a complete IQ modulator/demodulator, which makes it possible to support “all modes” in software.
- On the software side, the image is built with Yocto, and already includes Python, GNU Radio, development/debug tools, USB networking (Ethernet with DHCP and SSH), and hardware support (GPIOs, display, codec, SX1255).
- Images are already available for download at m17project.org/linht/experimental.
In short: it’s a small Linux computer with a radio front-end – and it fits into the enclosure of an off-the-shelf handheld.
Retevis C62
For our first prototype, we decided to reuse the case, keypad, and mechanical parts of the Retevis C62. This way, we can focus on what we actually want to develop – the PCB, RF design, and software – instead of spending months on enclosure design.


The LinHT board is a drop-in replacement for the C62’s original mainboard. You take out the vendor’s locked-down hardware, put in ours, and suddenly the same handheld becomes a fully programmable SDR.
This “donor device” approach keeps costs lower and lets us validate the concept quickly. Later iterations might explore a fully custom enclosure, but for now, the C62 path is the most practical.
The team
Right now, the LinHT core team is just three people:
- Wojciech, SP5WWP – software and hardware design, testing, first prototypes.
- Andreas, OE3ANC – software and system integration (Linux image, Yocto, drivers).
- Myself, Vlastimil, OK5VAS – PCB design.
It’s a small group, so it means we cannot add support for every feature immediately, but we’re making progress. We just received the first prototype PCBs, and Wojciech has already started bringing them up.
Current status

The Linux image is booting, networking works, and most of the hardware is already supported. GNU Radio flowgraphs can run directly on the handheld, which opens the door to a huge range of experiments.
On the RF side, the first prototypes are at the “does it even turn on” stage, but the design already covers the basics: display, codec, SX1255.
The next step is power amplification. The current board runs at milliwatt levels, but we’re already working on adding a PA for around 3–5 W output. That’s where my LinHT-rf-amp project comes in: a proof-of-concept RF amplifier board based on the Guerrilla RF GRF5604. Once we’ve characterized it, the PA will be integrated into the handheld.
Why should hams care?
Because it’s open.
Every major HT on the market today is a locked-down device. You get the features the manufacturer decided you should have, and that’s it. With LinHT, we finally have a path to a fully open handheld where you can:
- run your own software and protocols,
- experiment with SDR modes beyond FM/DMR,
- learn and tinker with GNU Radio on actual RF hardware,
- contribute to a platform that is community-driven instead of vendor-driven.
Bruce Perens, one of the early open-source pioneers, recently mentioned LinHT in his blog, recognizing it as an example of the kind of important innovation amateur radio needs. In my opinion, that alone is a good sign we’re onto something.
Why these design choices?
A few people have already asked why we picked Guerrilla RF’s GRF5604 as the PA, why the first prototype is “only” UHF, and whether the i.MX93 SoM can actually handle heavy DSP tasks like vocoders. These are all fair questions, so let’s unpack them.
On the PA: We went with the GRF5604 because it’s compact, efficient, and hits the power target we’re aiming for – around 5 W in a handheld. Yes, it’s designed for a 3-5.25 V supply, but that’s not a problem for us. The handheld form factor means a single Li-Ion pack or a 5 V power supply is a good fit. Guerrilla RF might not be as well-known in the ham community as, say, CML Micro, but this IC has all the neccessary parameters and documentation we need. For our first step, the balance of availability, size, and performance made sense.
On UHF first: The SX1255 transceiver chip we’re using covers 400-510 MHz, which neatly spans the 430-440 MHz ham allocation in Europe (and 420-450 MHz in the US). That makes UHF the logical starting point: it’s the “universal” handheld band. Could we also do VHF or 900 MHz? Sure, but that would mean different RFICs, and more filters. For this first iteration, it’s better to walk before we run. Once the hardware, software, and mechanics are proven at UHF, we can revisit multiband.
On DSP and vocoders: The SoM (an MCM-iMX93) is more than capable for digital voice. M17’s Codec2 vocoder runs fine. Wojciech and Andreas also tested TETRA reception, and performance was good. More demanding vocoders like IMBE/AMBE (used in P25, DMR, etc.) should be within reach of the dual Cortex-A55 cores and the M33 coprocessor. We haven’t even touched the NPU yet.
So the short version is: the choices we made aren’t the final word, they’re just the most practical path for a first prototype. UHF-only, 5 W PA, Codec2 and M17 working – enough to prove the concept.
What’s next
- Get the first PCBs fully operational (ongoing now).
- Tune and integrate the PA for practical output power.
- Improve documentation and release guides for flashing and building images.
- Expand the software layer: mode management, user interface, and integration of GNU Radio flowgraphs.
- Add more bands (not just UHF).
- Decrease the total price.
It’s still early days, but things are moving fast.



Assembling the LinHT
Unlike a commercial HT, LinHT is not something you take out of the box and power on. The project is still in the prototype stage, and building one requires both a new LinHT PCB and parts harvested from the donor Retevis C62 radio.
Components to reuse from the donor C62
The Retevis C62 provides most of the mechanical parts and several important components. These need to be de-soldered from the original C62 PCB and soldered onto the LinHT board:
- 2.5 mm and 3.5 mm audio jacks
- SMA antenna connector
- Flashlight LED
- Three ground springs from the bottom side
- Side button PCB (with PTT and BTN2)
- LCD display
- Volume knob with on/off switch
- Battery connector (can be reused or replaced with a new one)

Soldering the LinHT PCB
- System-on-Module (SoM)
Start with the i.MX93 SoM. The recommended way is using solder paste, a hot plate, and hot air reflow. This ensures all pads (including ground pads under the module) are connected.
If you don’t have this equipment, hand soldering with a fine-tip iron and plenty of flux is possible. In this case, the bottom ground pads won’t be connected, but the board will still function. - Connectors and LED
Next, solder the SMA, jacks, LED, and other donor components in their places on the LinHT PCB. - Side button PCB
Place the LinHT PCB into the C62’s aluminum chassis, hold the side-button PCB against the side cutout, and solder the five connection points.
Note: the chassis requires a small modification – two screw standoffs must be removed by drilling. (See photos below.) - Cleaning
Once all the soldering is done, clean the board thoroughly with IPA to remove flux residues. - Initial power-up
With the volume knob turned fully off, connect power to the battery connector. Use a bench supply set to about 8 V (simulating a 2S Li-ion pack).
The current draw should be ~160 mA at 8 V. If you see this, the board is alive. - Flashing firmware
At this stage, you can proceed to flash the Linux image into the SoM. (See next section for details.) - Display connection
Solder the LCD’s flexible flat cable to the bottom-side connector. - Final assembly
Fit the completed LinHT board and all parts back into the donor C62 enclosure. You now have a working LinHT prototype.








Flashing the Firmware
To bring LinHT to life, you need to flash a Linux image onto the i.MX93 SoM. This process is still a bit rough around the edges, so don’t be surprised if it takes a few tries.
Step 1: Download the required files
Get the latest bootloader and root filesystem image from the experimental builds:
Step 2: Install the flashing tool
You’ll need uuu, NXP’s Universal Update Utility:
- On Debian/Ubuntu:
sudo apt install uuu
- On Windows or other platforms: download binaries from the NXP mfgtools GitHub
Step 3: Put the board into USB boot mode

- Turn off the LinHT board and remove the battery.
- Make sure the volume knob is turned fully off.
- Before plugging in USB, apply 3.3 V between GND and the lower function button pad (see photo).
- It’s the middle pad on the small horizontal PCB at the side.
- This pad is connected to the
USB_BOOT
line, so you don’t need to touch the SoM pins directly. - This may not be necessary in newer versions of the PCB.
- Plug in the USB cable.
- Remove the 3.3 V after a few seconds.
At this point, the SoM should appear on the USB bus as an NXP device in boot mode.
Step 4: Run the flash command
From the directory with both downloaded files, run:
uuu -v -b emmc_all imx-boot-mcm-imx93-sd.bin-flash_singleboot linht-image-mcm-imx93.rootfs.wic.zst
Flashing will take about 10 minutes.
Troubleshooting
This step is the most fragile part of the process right now:
The SoM and the uuu tool are picky. Try different USB cables and ports. Do not use a hub, connect directly to the PC.
On Ubuntu, AppArmor can sometimes interfere with USB access. Try disabling AppArmor temporarily if you get permission errors.
If you see errors like this in journalctl
:
usb 2-1.6: new high-speed USB device number 16 using ehci-pci
usb 2-1.6: device not accepting address 18, error -32
usb 2-1.6: device not accepting address 19, error -71
usb 2-1-port6: unable to enumerate USB device
it means your computer didn’t successfully enumerate the SoM. This probably means a soldering issue on the USB data pads at the SoM. Double-check your solder joints and reflow/resolder if necessary.
Note: We’re still investigating other potential causes and fixes, so this section will be updated as the process improves.
Closing thoughts
For me, LinHT is a very interesting project: an open SDR handheld I can hack on. I’m surprised nobody made it before!
I’ve only been a licensed ham for a few months. Even though I studied electronics and always gravitated toward RF, I didn’t bother with a callsign until I started experimenting with New Packet Radio and learning about Hamnet. That opened my eyes to what’s possible when amateur radio is combined with modern technologies and networking.
When I discovered M17, it immediately felt right. I care deeply about open-source, open hardware, and community-driven projects. I also really enjoy working in KiCAD and contributing to designs that anyone can study, modify, or build on. All of that comes together in LinHT.
That’s why I believe every amateur should care about this project. It’s not just another handheld. It’s a platform for experimentation and for learning.
If you’re curious, check out the resources:
- Main project repo: LinHT-hw
- Project webpage: LinHT Hardware
- Experimental images: m17project.org/linht/experimental
- PA module PoC: LinHT-rf-amp
- Project Discord: M17 Foundation
Feedback, ideas, and help are welcome. And yes, it runs Doom!
