Node - Daedalus
Dedicated node for hardware testing (FPGA / PCIe / NIC)
For the full cluster architecture, see the Home Server Infrastructure Overview.
At a Glance
| Item | Value |
|---|---|
| Role | Hardware Test (FPGA · PCIe · NIC) |
| Hardware | Custom PC, Intel Core i5-4670, 8 GB RAM, 2 TB HDD |
| Attached devices | Xilinx ZYNQ-7000 FPGA & Xilinx Kintex UltraScale+ FPGA boards |
| OS / Hypervisor | Ubuntu (bare metal, no hypervisor) |
| Public ports | None |
| In service since | 2025 onward |
| Current status | Running (powered on per experiment) |
One-line summary: Daedalus is a bare-metal node kept separate so that physical gear like FPGA and PCIe is never mixed with other workloads.
What Runs Here
Daedalus is not an always-on service node; it is the node used for hardware testing.
Attached devices / tools
| Area | Setup |
|---|---|
| FPGA boards | Xilinx ZYNQ-7000 series (USB-JTAG), Xilinx Kintex UltraScale+ FPGA (JTAG) |
| Host OS | Ubuntu 18.04 LTS |
| Network | WireGuard client to reach the Hades / Athena internal networks |
Workflow

Key Decisions
- Why bare-metal Ubuntu (no hypervisor)
Unlike Athena and Hades, Daedalus intentionally has no hypervisor.
- Avoiding USB-JTAG / PCIe passthrough complexity. A hypervisor adds another step to hand USB/PCIe devices precisely to a guest, and vendor tools often assume devices visible directly on the host, which makes debugging harder.
- Daedalus’s value ≠ availability. It does not need to be always-on, so the benefits of VM isolation/migration are small.
- Why Ubuntu
Xilinx Vivado and the ZYNQ board drivers run most stably on Ubuntu LTS, and most vendor docs and community resources are written against Ubuntu. CentOS/RHEL are officially supported too, but for a personal environment Ubuntu’s resource accessibility made it the better fit.
Operations & Incidents
Routine operations
- Boot only when running an experiment; otherwise powered off (less power/noise)
- Copy outputs (
.bit, logs, waveform captures) to the NAS backup path when an experiment ends
Incident — a kernel-version issue prevented NIC detection
Situation: Ubuntu 18.04 LTS’s 4.x kernel did not match the kernel features required by the NIC/cndm driver, causing compatibility issues during NIC detection and kernel-module builds.
How I noticed: while tracing the build failure, I found a compatibility problem between the running kernel version and the device driver / kernel headers.
Response:
- Kernel update. Updated the Ubuntu 18.04 LTS kernel from 4.x to
5.4.0-150. - Reboot and version check. Rebooted the system remotely, then reconnected over SSH to confirm it booted into the new kernel.
- Device and build-environment check. Confirmed the NIC enumerated correctly on the 5.4 kernel, installed the matching kernel headers, and retried the
cndmmodule build to producecndm.kosuccessfully.
Lesson: when building hardware drivers or kernel modules, you have to align not only the OS version but the running kernel, the kernel headers, and the device driver together.
Limitations & Next Steps
What’s missing now
- With no hypervisor, the experiment environment is tied directly to the host OS — touching drivers/kernel affects the whole host (weak per-experiment isolation)
- The kernel/driver environment is not recorded in a reproducible way — the setup process, as in the NIC incident, is not documented
- USB-JTAG/PCIe setup depends on physical connections — devices cannot be swapped/reconnected remotely
What I’ll improve next
- Pin the Vivado/driver build environment to an image/script so the “kernel 5.4 + specific headers + driver” combination becomes reproducible
- Keep an experiment notebook of device connections, kernel parameters, and build steps so the next test can reproduce the same state
Photo
Korean version: Node - Daedalus