aioscilloscope / Notes / October 2026

Inside NovaOS: no Android, no X server, no compositor

An oscilloscope needs a kernel, a way to get samples off the FPGA, and a way to put pixels on the panel. Stock ships a phone operating system to do that. NovaOS ships only what the scope uses, and every layer talks as directly to the hardware as Linux allows.

CH1The whole stack

dho-ui: the scope UIOpenGL ES on the Mali-T860, straight to DRM/KMS
dho-acqd: the acquisition enginePCIe DMA, shared-memory ring, density maps
dho-hostd: SCPI, VXI-11, LXI, Webcontrol, remote viewH.264 through Rockchip MPP
FPGA and front-panel daemonsPLL, multiboot, PCIe bring-up; keys, knobs, LEDs
systemd, Yocto, a 266 MB root16 running services
Linux 6.12.112, Rockchip BSPXilinx XDMA, Mali kbase, MPP, DRM
RK3399: 2 × A72, 4 × A53, Mali-T860FPGA over PCIe, 12-bit ADCs

Measured on a running DHO924S: 217 MB of its 3.9 GB of RAM in use, with the UI the biggest process at about 97 MB and the acquisition engine at about 22 MB. There is no Android runtime, no Java, no X server and no Wayland compositor. All the scope software is written in Rust. Every layer's version and licence, down to each package and crate, is on What's inside NovaOS.

Why 6.12

The newest stable kernel is 7.2, and we could run it. We don't, because the GPU matters more: 6.12 is the newest kernel in Rockchip's BSP that ships the Mali vendor driver (libmali), and on these scopes it beat the open-source Panfrost driver in our tests. 6.12 is also a long-term kernel, supported upstream until December 2028 according to kernel.org. When Rockchip moves its Mali support to a newer kernel, NovaOS moves with it.

The kernel itself is our own port: Rockchip's latest 6.12 BSP merged with the current 6.12 long-term release, plus the board support for these scopes (device trees, the FPGA's PCIe and SPI paths, the panel, the front panel), written and maintained by us rather than taken from another board's or distribution's kernel. That gives these scopes Rockchip's drivers and the upstream security fixes together. We're not aware of another RK3399 kernel that combines the two.

CH2Pixels: GLES straight to KMS

The UI is the only DRM master of the panel. It renders with OpenGL ES on the Mali-T860, using the vendor Mali driver, and page-flips with KMS: no display server, no window manager, no compositor between the trace and the glass. The boot splash uses the same path, so the panel goes from boot screen to live trace without flicker or a console in between.

CH3Samples: PCIe DMA to a zero-copy ring

The FPGA streams records over PCIe through Xilinx's XDMA driver into the engine, which publishes batches in a shared-memory ring. The UI reads them under a per-slot sequence lock with no copy and no socket in between; a batch the engine reuses before it is read is simply skipped, so the engine never waits on the screen. Settings and results travel on a small Unix-socket protocol.

CH4Remote view: GPU to hardware encoder

When another display watches, the UI converts each frame to NV12 on the GPU and reads it back asynchronously, and the host daemon feeds it to the RK3399's hardware H.264 encoder through Rockchip MPP, then sends it over a WebSocket. A change on the scope reaches the network in about 78 ms and another display's glass in about 0.1 s,.

Kept small on purpose

Numbers measured on our own DHO924S and MHO934 in October 2026. More in the boot write-up.