Embedded systems testing on real hardware
Midair runs the same test suite on every board, build and network setup you have, and keeps the evidence of each run.
The failures that matter in embedded systems appear on one board revision, after one update or under one load. Midair finds where.
What embedded systems testing is.Software, tested with its hardware.
Embedded systems testing checks software together with the hardware it runs on: the board, its peripherals, the operating system, the network and the other devices around it.
Firmware testing is one part of it. Embedded systems testing also covers how drivers, services and applications behave on the device, and how a fleet of devices behaves in the field.
Results depend on the board revision, the build, the timing and the state the device is in. So a useful test records all of that next to the verdict.
Our guide covers methods and common mistakes in more depth: How to test embedded systems.
Test levels.From one workstation to a fleet.
Each level finds failures the level before it cannot see. Choose one to see what it catches and how Midair handles it.
On a workstation
- Catches
- Logic errors, parsing mistakes, wrong arithmetic and broken contracts.
- Misses
- Timing, peripherals and anything the real board does differently.
- In Midair
- Visao analyzes the same sources with your cross toolchain before anything runs, and reports MISRA C:2012 rule numbers if you use that profile.
In an emulator
- Catches
- Boot problems, OS integration and services that fail to start.
- Misses
- Real peripherals, analog behavior and exact timing.
- In Midair
- The same suite runs on QEMU with snapshots, so tests exist before the board is on the desk.
On one board
- Catches
- Peripheral bugs, timing, power loss and recovery after a fault.
- Misses
- Problems that need other devices or a network around the board.
- In Midair
- A host next to the board controls power, flashing, the serial console and JTAG for the test.
With the hardware around it
- Catches
- Protocol errors, start-up order, drivers that meet real devices.
- Misses
- Rare failures that show up only across many units.
- In Midair
- Test Environment coordinates agents on several hosts in one run, so the board, the network and the peers are part of the test.
Across a fleet
- Catches
- Configuration drift, one unit that differs from the rest, changes after an update.
- Misses
- Whether the whole product does its job for the user.
- In Midair
- Delta compares each device with a baseline and points out the outliers in a fleet.
As a whole system
- Catches
- Behavior of the complete product in its real environment.
- Misses
- Nothing a single level can replace: it builds on the others.
- In Midair
- One record per run keeps the code findings, the test verdicts and the device evidence together.
Why embedded is harder to test.Five reasons.
The result depends on the hardware
The same build can pass on one board revision and fail on another.
Timing decides
A response that comes late is a defect, and it may come late only under load.
The device shows little
There is often no debugger at hand, only a console and a few logs.
State carries over
A previous test, a long uptime or a half-finished update changes what the next test sees.
Late failures cost the most
A bug found after hardware integration can mean a new board spin or a delayed release.
How Midair tests embedded systems.Four steps, one record.
-
1
Visao
Check the code first
Visao analyzes C, C++ and assembly with your cross toolchain, including bare-metal targets. Against a baseline, it reports only new findings.
visao · arm-none-eabi-gcc · baseline: main otp.cpp:20:20 error arithm/integer/overflow MISRA 12.4 otp.cpp:31:5 error cpp/string/no_null_terminator MISRA 21.17 2 new findings, 0 fixed since the baseline
-
2
Test Environment
Run one suite on every target
Agents on the test hosts run the same suite on each board, build and network setup. Each test has an expected verdict, so a regression stands out.
fw-smoke · fw 2.4.1 · 4 targets board rev A 12 as expected board rev B 11 as expected, 1 unexpected board rev C 12 as expected QEMU aarch64 12 as expected update/keep_config fails on rev B only
-
3
Delta
Look at the device itself
Delta inspects the running system or the firmware root file system: ports, persistence files, binaries and their hardening. It reports the differences from a baseline.
delta · board rev B · baseline golden.json appeared /etc/cron.d/backup mode 0666 T1053.003 appeared tcp 0.0.0.0:2375 dockerd missing stack canary in /usr/bin/agent 3 differences from the baseline
-
4
Midair
Read the failure in context
Midair keeps each run with its configuration, logs and verdicts, and never writes over it. An AI assistant connected through MCP reads the same failures and logs.
mcp · midair_run_failures update/keep_config board rev B FAILED expected PASSED mcp · midair_get_log console config v3 found, reader expects v4 console Kernel panic - not syncing
The embedded path.One page per stage.
Further reading.From our engineering work.
Questions.Short answers.
What is embedded systems testing?
Embedded systems testing checks software together with the hardware it runs on: the board, its peripherals, the operating system, the network and the devices around it.
What are the levels of embedded testing?
Unit tests on a workstation, tests in an emulator, tests on one board (hardware-in-the-loop), integration with the hardware around it, tests across a fleet and validation of the whole system.
How is it different from firmware testing?
Firmware testing focuses on the software inside one device: flashing, boot, peripherals and recovery. Embedded systems testing also covers the applications on the device, the network and fleets of devices.
Can we test before the hardware is ready?
Yes, in part. Visao analyzes the source without running it, tests can run on QEMU, and Delta can inspect a firmware root file system offline.
Which boards and systems does Midair work with?
Tests reach the board through a host next to it, so the board needs no agent. Delta runs on embedded Linux on x86_64, AArch64, ARMv7, RISC-V and MIPS. Visao analyzes code built with cross toolchains, including bare-metal targets.
Does it fit our CI?
Yes. Runs start from your CI, for example with the Jenkins plugin, and an AI assistant can start runs and read failures through MCP.
Start with one board and one suite.Then add the rest of the lab.
Compare the plans on the pricing page. Prices are monthly, in euros.
Start your pilot