uConsole with an NVMe drive: HackerGadgets Upgrade Kit, assembly and booting from SSD
A microSD card is fine for the first login, but once the uConsole becomes a working tool (compiling, containers, big wordlists, SDR recordings), waiting on the card starts to hurt. The Upgrade Kit from HackerGadgets brings the PCIe bus out of the CM4/CM5 module and puts an M.2 NVMe drive inside the case. Below: what to buy, how to assemble it, what to set in the EEPROM and config.txt, how to move the system off the card, and where people trip up.
- What you need
- Assembly step by step
- Settings before the first boot from NVMe
- Moving the system from the card to the drive
- Known problems
- Frequently asked questions
What you need
The kit is two boards from HackerGadgets. We sell them separately because some people already have one of them.
- Adapter Board (Upgrade Kit) replaces the stock board the compute module sits on. It brings out PCIe, and with the CM5 also USB 3.0; it has a PWM fan header, a CSI camera port and an RTC battery socket. Without it the drive has nothing to connect to.
- NVMe Battery Board replaces the stock battery module. It has an M.2 slot (2230-2280), holders for two 18650 cells (other variants take 21700 cells or a LiPo pack) and reverse-polarity protection for the cells. It fits under the original back cover with no case modifications. The ribbon cables connecting the two boards are included.
- An M.2 NVMe drive, size 2230-2280. On the ClockworkPi forum the longest trouble-free run belongs to a WD SN740 256 GB (CM5, PCIe gen 2, 471 MB/s read, months of use). One user fought with a Samsung 980 until he changed the way he moved the system over. Go for low-power gen 3 drives without a heatsink.
- A compute module: CM4 or CM5. Both have PCIe x1, but USB 3.0 and the PWM fan only work with the CM5.
- A working system on a card: Rex's Bookworm or Trixie. You boot the uConsole from the card, set up the EEPROM and copy the system to the drive. Flashing the image to a card is covered in the guide: Which OS for the uConsole CM5 and how to flash it to a microSD card (2026).


Assembly step by step
Tools: a small Phillips screwdriver and fifteen quiet minutes. Before opening anything, power the uConsole off and remove the cells.
- Take off the back cover and remove the stock battery module.
- Lift the compute module off the stock adapter board. It sits on two board-to-board connectors, so lift it evenly from both sides. Unscrew the board, screw the Adapter Board in its place, then press the module onto the new connectors until it sits flat.
- Slide the M.2 drive into the slot on the NVMe Battery Board and fasten it with the screw to the standoff matching its length.
- Connect the two boards with the PCIe ribbon cable from the kit. Mind which side the contacts face: a cable inserted backwards is the most common reason the drive "does not exist". On the forum this mistake comes back regularly.
- Fit the NVMe Battery Board where the battery module was, insert the cells as marked and put the cover back on. If a cell goes in backwards, a warning LED lights up and nothing heats up.
Settings before the first boot from NVMe
Boot the uConsole from the card and do three things.
1. config.txt (the file /boot/firmware/config.txt). In Rex's images the [pi5] section already has dtparam=pciex1 and dtparam=pciex1_gen=3, and the [pi4] section just dtparam=pciex1. Gen 3 over the ribbon can be unstable (white screen, freezes); the forum consensus is to drop to dtparam=pciex1_gen=2. The drive is still many times faster than the card. Older Kali images sometimes had dtparam=pciex1=off: change it to dtparam=pciex1.
2. EEPROM (CM5). sudo rpi-eeprom-update -a, reboot, then sudo rpi-eeprom-config -e and the configuration Rex gives for the CM5 Lite, with one extra line: PCIE_PROBE=1.
[all]
BOOT_UART=1
POWER_OFF_ON_HALT=1
BOOT_ORDER=0xf461
PCIE_PROBE=1
SD_BOOT_MAX_RETRIES=2
SD_QUIRKS=1
BOOT_ORDER is read from the right: SD card (1), NVMe (6), USB (4), f means "start over". PCIE_PROBE=1 tells the bootloader to look for the drive on a board that is not an official HAT+ as well, which is how the Raspberry Pi documentation describes it. On the CM4 a current bootloader and a BOOT_ORDER containing 6 are enough.
3. Check that the drive is visible. After the reboot, ls -l /dev/nvme* should show /dev/nvme0n1, and lsblk its capacity. If nothing shows up, go back to the ribbon cable in assembly step 4.
Moving the system from the card to the drive
The most reliable route, confirmed by several users on the ClockworkPi forum: copy the working system from the card to the drive with the SD Card Copier tool (Accessories menu).
- Open SD Card Copier. From: the card (mmcblk0). To: the drive (nvme0n1). Leave "New Partition UUIDs" ticked.
- Start. Copying the 7-8 GB system takes a few minutes, and the tool stretches the partition over the whole drive right away.
- Power the uConsole off completely (not a reboot), remove the card, power it on. The system boots from NVMe.
Flashing the image with Imager straight onto the drive (through a USB enclosure or from the uConsole itself) works too, but it needs a manual config.txt fix on the drive, and on the forum it more often ended with a boot that works "every now and then". Copying from a working card sidesteps those problems.
Known problems
- The drive disappears after closing the case. The PCIe ribbon moved or is reversed. Open it up and check both ends.
- White screen or freezes under load. Drop from gen 3 to gen 2 in config.txt.
- The uConsole powers off on
sudo rebootinstead of restarting (reported for the CM5 booting from NVMe). A full power cycle helps. The forum thread ties it to a change in pin behaviour in the CM5 firmware; there is no convenient software fix as of today. - Battery. The drive and the CM5 draw power. HackerGadgets quotes about 2.5 hours of 1080p video playback for the version with two 18650 cells and about 4.5 hours for 21700. Spare cells in the backpack settle it.
- Heat. The CM5 does not throttle in the closed case (we checked in the thermal test), but a gen 3 drive under long writes adds its share. A drive without a heatsink and gen 2 in config.txt close the matter.
Frequently asked questions
Does NVMe work with the CM4?
Yes, over PCIe gen 2. What does not work with the CM4 is anything that needs USB 3.0 (the ports on the AIO V2 run as USB 2.0 then), and the fan runs at a fixed speed.
Do I have to remove the SD card?
With BOOT_ORDER=0xf461 the bootloader tries the card first, so with a card inserted it boots from the card. Either remove the card or set 0xf416, which puts NVMe before SD.
Which drive should I buy?
M.2 2230 or 2242, gen 3, low power draw. From the forum: WD SN740 without reservations. Gen 4 drives with heatsinks run hot and gain nothing on a gen 2 link.
What next
Both boards are available from us: the uConsole Adapter Board (Upgrade Kit) and the uConsole NVMe Expansion (Battery Board). If you are moving up from the CM4 at the same time, the Raspberry Pi CM5 8 GB Lite gives you USB 3.0 and the PWM fan on the same adapter board, and the AIO V2 adds 1 Gbps Ethernet, RTL-SDR, GPS and LoRa through it. The rest of the add-ons are in the ClockworkPi collection.