Everything you need to assemble, flash, and boot a KVM Board for the first time.
| Compositor | MV-01 Milk-V Duo S | SG2000 SoC, 512MB RAM, RISC-V + ARM |
| HID Controller | ES-01 ESP32-S3-DevKitC-1 | N16R8 variant (16MB flash, 8MB PSRAM) |
| Carrier PCB | PB-01 KVM Carrier Board | 6-layer, 120 x 92mm, order from JLCPCB/PCBWay |
| SD Card | SD-01 microSD 8GB+ | Class 10 or better for Duo S boot image |
| USB Cable | CB-01 USB-A to target | Connects USB2514B hub to target machine |
| HDMI Cable | CB-02 HDMI 1.4 | Target video output to TC358743 capture |
| Power | PW-01 5V 2A USB-C | Powers the carrier board and both modules |
The ESP32-S3 runs a Rust firmware that presents as a USB HID composite device (keyboard + mouse + absolute pointer). It receives commands over UART from the Duo S and injects them into the target machine.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh cargo install espup espup install . ~/export-esp.sh
Connect the ESP32-S3-DevKitC to your computer via its USB port. Hold the BOOT button while pressing RST to enter download mode if needed.
cd firmware/esp32-hid-rs cargo +esp run --release
After flashing, the ESP32-S3 will enumerate as a USB HID device. On Linux, check with lsusb — you should see a composite HID device (keyboard + mouse).
The Milk-V Duo S runs a custom Linux image with KVMD, go2rtc, and all dependencies pre-installed. The build uses Milk-V's Buildroot SDK with a KVM overlay.
Requires Docker. The first build takes approximately 20 minutes.
mise run duos:build
# Replace /dev/sdX with your SD card device dd if=.tools/duos-kvmd.img of=/dev/sdX bs=1M status=progress sync
Insert the microSD card into the Duo S module on the carrier board. Apply power via USB-C. The KVMD daemon starts automatically on boot via the S99kvmd init script.
After powering on, the Duo S boots Linux and starts the KVM pipeline automatically.
http://<duo-s-ip>:8080. You should see the KVM control interface with a live video feed from the target machine.
Connect an Ethernet cable to the Duo S RJ45 port. The device requests a DHCP address by default. Check your router or use nmap -sn 192.168.1.0/24 to find the assigned IP.
If Ethernet is not available, the Duo S exposes a USB-NCM (Network Control Model) interface over its USB-C port. Connect it to your workstation and the device appears as a network adapter.
# The Duo S USB-NCM interface uses a fixed IP # Access the web UI at: http://192.168.42.1:8080
To set a static IP, edit /etc/network/interfaces on the Duo S SD card before first boot. The file is in the root filesystem partition.