Software · System software
Device drivers
Kernel and user-mode drivers that let an operating system talk to your own hardware safely and quickly.
A new board or instrument is only useful once the operating system can drive it. We write drivers for Linux, Windows and real-time systems that handle interrupts, DMA and power states correctly, expose a clean interface to applications, and survive suspend, hot-plug and kernel upgrades without taking the machine down.
What we build
- Linux kernel modules for PCIe, USB, I2C, SPI and UART peripherals
- Windows drivers built on KMDF and UMDF, prepared for Microsoft signing
- Device tree bindings and board support for embedded Linux boards
- DMA and interrupt handling tuned for high-throughput data capture
- User-space libraries and command-line tools that wrap the driver interface
- Automated tests on real hardware covering load, unload, suspend and hot-plug
DemoInteractive · sample data
Try it live.
A working sample with made-up data. It runs in your browser; nothing is sent anywhere.
dev@rig-01:~/acqcard$ make -C /lib/modules/$(uname -r)/build M=$PWD CC [M] acqcard_main.o CC [M] acqcard_dma.o LD [M] acqcard.ko Build finished: 0 warnings dev@rig-01:~/acqcard$ sudo insmod acqcard.ko && dmesg | tail -4
What it does well
Kernel-safe code
Locking, memory and error paths are reviewed so a faulty device cannot crash the host.
Upstream-friendly
Linux drivers follow kernel coding style and can be submitted upstream if you want.
Power management
Suspend, resume and runtime power states are handled so machines sleep and wake properly.
Clean interfaces
Applications use a documented ioctl, sysfs or library API instead of raw registers.
Signed and packaged
Builds ship as DKMS modules or signed Windows driver packages, ready to install.
Hardware-in-loop tests
Every change runs against the real device on a test rig before it ships.
Questions
Do you work on both Linux and Windows drivers?
Yes. On Linux we write kernel modules and device tree bindings; on Windows we use the KMDF and UMDF frameworks from the Windows Driver Kit. We pick the framework by what the device needs, and keep shared logic in one place where the platforms allow it.
Can a driver be written in Rust?
For new Linux drivers it is now an option in some subsystems, and it removes whole classes of memory bugs. Where the subsystem or your kernel version does not support it yet, we write careful C and check it with sparse, KASAN and static analysis.
What do you need from us to start?
The hardware itself or a development board, its datasheet and register map, the target operating systems and kernel versions, and any existing vendor code. If the documentation is thin, we can work from bus captures and the vendor reference driver.