Host-based Development
Dawn is built on top of Apache NuttX, which gives it access to powerful host-side execution targets:
the NuttX simulator - a NuttX kernel that builds as a regular Linux user-space process and runs natively on the host;
NuttX QEMU targets - full NuttX images that boot inside a
qemu-system-*virtual machine with KVM acceleration on the host.
Combined with Dawn’s Fake Devices, these targets allow a large part of Dawn development, demonstration, and testing to happen on a developer workstation, with no real embedded board involved.
Why develop on host
Working on the host shortens the iteration loop and removes the usual hardware friction:
No flashing, wiring, or board bring-up between code changes.
Standard Linux tools (
gdb,perf,valgrind,strace, log capture) work directly on the simulator process.The same descriptor-driven IO/PROG/PROTO pipeline that runs on real silicon also runs on the host, so the bulk of framework and application logic can be developed and exercised before any hardware is touched.
Demos and reproductions are easy to share.
The CI / QA pipeline depends on host targets (see QA). Anything that runs on the host can also be automated.
NuttX simulator
The simulator is the primary host target. NuttX builds as a Linux
process (./<build_dir>/nuttx) and Dawn runs inside it as if it were
on real hardware: the same drivers, the same descriptor parsing, the
same IO/PROG/PROTO objects.
Dawn keeps a dedicated simulator board under
boards/sim/sim/sim/ (custom variant of the NuttX simulator board
trimmed for Dawn use). Its configurations include the showcase
nsh_shell config (the easiest entry point, see
Quick Start), the unit-test configurations tests and
nsh_tests, and a number of protocol-focused demos
(nsh_can, nsh_serial, nsh_modbus_rtu, nsh_nxscope,
nsh_gateway, nsh_programs_can, nsh_blinky_shell,
dynamic_desc).
Most of these configurations enable the fake drivers so that ADC samples, sensor streams, GPIO state, LEDs, buttons, and similar peripherals look real to Dawn.
NuttX QEMU
QEMU targets fill the gap where the plain simulator is not enough - mainly when a real network stack, BSP code closer to a physical architecture, or a particular CPU feature set is required.
Dawn ships QEMU board configurations under boards/<arch>/qemu/....
The QA pipeline currently uses them for UDP and Modbus-TCP integration
tests, where the QEMU guest is bridged to the host network through a
tap interface. The same fake drivers are available, so the
peripheral side of the system behaves the same way as in the simulator.
Bringing a QEMU target up requires a working qemu-system-* binary
and KVM (for x86_64 targets). See Host Environment for the full
list of host packages and kernel features.
Where to go next
Quick Start - install the toolchain and run the first simulator build (
nsh_shell).Host Environment - host packages, kernel features, and one-time setup needed for the simulator and QEMU.
Fake Devices - fake NuttX drivers used to make hardware-less targets behave like real boards.
QA - the QA pipeline that drives the simulator and QEMU targets in CI.
Board Examples - per-board, per-config catalogue of available demos.