DIY Projects

Porting Apache NuttX to the Adafruit Fruit Jam to Run Doom

Porting Apache NuttX to the Adafruit Fruit Jam to Run Doom

The first frame of Doom flickering onto an HDMI monitor is a familiar rite of passage, but this time it ran off a board barely bigger than a credit card. A forum maker known as speccy88 had spent weeks coaxing a real operating system onto the Adafruit Fruit Jam, and the payoff was a keyboard, a mouse, and the 1993 shooter responding in real time on hardware built around the RP2350.

What got built

The result is a stable port of Apache NuttX, a small POSIX-compliant Unix-like OS that scales from 8-bit chips to 64-bit systems and ships with its own shell called NSH. On the Fruit Jam, every peripheral now shows up under /dev, the same way it would on a Linux box: DVI/HDMI video, USB input, NeoPixels, the speaker, buttons, and the IR receiver. On top of that base, the port already runs LVGL graphics demos and a build of Doom with live keyboard and mouse control.

How it came together

It did not start with NuttX. speccy88 first forked an existing Linux port and got HTTP, FTP, and Telnet servers alive, but Linux is a heavy load for a microcontroller and the build grew unstable as more features piled on. Networking was another wall. The stock ESP32 NINA-W102 WiFi firmware has no raw-frame access, so sockets crawled, and swapping in Espressif’s ESP-Hosted-MCU fixed the throughput. The real turning point was dropping Linux for NuttX, then porting USB keyboard, mouse, and Xbox controller support from another community project and writing a DVI framebuffer driver. Two experiments sit on top now: a TRMNL dashboard over HDMI, and a tiny on-device agent called FruitClaw that shares roughly 20 tools between a local process and an MCP server.

The takeaway

For anyone learning embedded systems, this is a rare look at the layer between bare-metal firmware and a full desktop OS. NuttX is small enough to read and hack, yet real enough to run a shell, a network stack, and a windowing demo on the same chip. If you have a Fruit Jam on your bench, the full write-up and progress notes live on the Adafruit forum thread. Start by flashing NSH and poking around /dev before you tackle the graphics stack.

Frequently Asked Questions

What is the Adafruit Fruit Jam and why is it a good target for an OS port?

The Fruit Jam is an Adafruit board built around the RP2350 with DVI/HDMI output, USB, NeoPixels, a speaker, buttons, an IR receiver, and generous PSRAM and Flash. That mix of video, input, and memory gives an operating system real hardware to drive, which is why it makes a fun target for a NuttX or Linux port.

Why switch from Linux to Apache NuttX on a microcontroller?

Full Linux is a heavy load for a microcontroller, and the build got less stable as more drivers and servers were added. Apache NuttX is a small POSIX-compliant RTOS with its own NSH shell that scales down to 8-bit chips, so it stayed stable while still exposing every peripheral under /dev like a Unix system.

What will I learn if I try building this?

You get hands-on practice cross-compiling an RTOS, writing and porting device drivers, bringing up a DVI framebuffer for video, wiring USB HID input, and debugging a network stack over WiFi firmware. Those are core embedded-systems skills that transfer straight to thesis and capstone projects.

This article was inspired by reporting from Adafruit. Find the parts and modules to build it at Circuitrocks.

// written by Ann Arandia

Ann Arandia covers community projects and maker events for the Circuitrocks blog. She writes about local workshops, kid-friendly electronics, and the Philippine maker scene — the people, the meet-ups, the projects that come out of them.