Firmware testing services for embedded devices

Midair flashes your firmware onto real boards, runs the tests, watches the serial console and keeps the evidence of every run.

Start with one firmware failure that costs your team time. A pilot connects one bench and one suite, and grows from there.

run 412 · bench lab-2 · fw 2.4.1 Example run
flash   dfu: image written, read back, verified
power   outlet 3: off, on
console U-Boot 2024.01
console Starting kernel ...
test    boot/time_to_shell          PASSED  6.2 s
test    power/cut_during_write      PASSED
test    update/keep_config          FAILED  expected PASSED
console Kernel panic - not syncing (pattern matched)
power   cold reboot of the board
delta   appeared: /etc/cron.d/backup  mode 0666
midair  run 412 saved: configuration, logs, verdicts

What firmware testing is.And why a laptop is not enough.

Firmware testing checks that the software inside a device works on the real hardware. It covers flashing, boot, peripherals, timing, updates and recovery after a fault.

Unit tests on a laptop miss most of this. A firmware bug often needs one board revision, a long uptime or a power cut at the wrong moment.

So a firmware test controls the bench as well as the code: power, flashing, the console and the wires to the peripherals. It also records all of them next to the result.

Where firmware fails.Six moments in a device's life.

Pick a moment to see what goes wrong there and what a test does about it.

Flash

What goes wrong
A write stops halfway, or the image does not fit the partition on one board revision.
What the test does
Write the image, read it back to verify it, and wait for the board to come back after the reset.
What Midair keeps
The image, the readback result and the console output.

Boot

What goes wrong
The bootloader starts the wrong image, or a driver hangs on one peripheral.
What the test does
Watch the serial console for U-Boot and the kernel, and time each boot stage.
What Midair keeps
The full console log, cut by test.

Run

What goes wrong
A sensor answers late under load, or two interrupts race.
What the test does
Drive GPIO, I2C, SPI and CAN from the test and check what the firmware answers.
What Midair keeps
Each verdict next to the expected one, with the test parameters.

Long uptime

What goes wrong
Memory leaks slowly, a counter wraps, and the watchdog resets the device after thirty hours.
What the test does
Keep the scenario running, follow memory through the run and catch the watchdog reset.
What Midair keeps
The timeline of the run, with the reset in it.

Update

What goes wrong
The new version cannot read the configuration that the old version wrote.
What the test does
Flash version N, then N+1, and run the same suite on both.
What Midair keeps
Two runs, each with its own configuration and pinned commits.

Power loss

What goes wrong
Power drops during a write, and the device does not boot again.
What the test does
Cut power at a chosen moment from a PDU, a relay or a USB hub, then check that the device recovers.
What Midair keeps
The moment of the cut, the console before and after, the verdict.

The bench, under test control.Every wire the test needs.

A test agent runs on a host next to the device. Through it, a test reaches every connection an engineer would use by hand. The device itself needs no agent.

QEMU SoC PWR UART USB JTAG GPIO CAN ETH Device under test

How a run works.Five steps, one record.

  1. 1
    Visao

    Check the code before it runs

    Visao analyzes the C, C++ and assembly sources with your cross toolchain, such as arm-none-eabi-gcc. With the MISRA C:2012 profile, each finding carries its rule number. Against a baseline, only new findings are reported.

    visao -- otp.cpp · MISRA C:2012
    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 against the baseline
  2. 2
    Test Environment

    Flash and boot the board

    The test host writes the image, verifies it and power-cycles the board. The serial console goes into the run log from the first line of the bootloader.

    bench lab-2 · board 3
    flash    dfu: image written, read back, verified
    power    outlet 3: off, on
    console  U-Boot 2024.01
    console  Starting kernel ...
    console  login prompt after 6.2 s
  3. 3
    TS Factory

    Run the suite

    Each test has an expected verdict, and Midair compares the obtained one with it. Describe a new test in plain words, and TS Factory writes it into the suite repository on its own branch.

    fw-smoke · 12 tests
    boot/time_to_shell       PASSED   expected PASSED
    power/cut_during_write   PASSED   expected PASSED
    update/keep_config       FAILED   expected PASSED
    11 as expected, 1 unexpected
  4. 4
    Delta

    Inspect the device

    Delta checks the running device, or the firmware root file system without booting it: open ports, persistence files, binaries and their hardening. It compares the result with a baseline and lists what appeared or went missing.

    delta --root ./rootfs --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
  5. 5
    Midair

    Keep one record

    Midair stores the run with its configuration, pinned commits, logs and verdicts. It never writes over a run, so the same failure can be opened again next month.

    run 412 · bench lab-2 · fw 2.4.1
    configuration  run.conf.lab-2, env.lab-2
    commits        pinned in builder.conf.lock
    logs           console, kernel, test tree
    verdicts       11 as expected, 1 unexpected
    evidence       2 findings, 3 device changes

How a pilot starts.One failure, then the rest.

  1. Pick one failure

    Choose a firmware problem that costs your team time today.

  2. Connect one bench

    Power, console and flashing for one board, through a host next to it.

  3. Write the first suite

    With TS Factory, or by hand in the Test Environment format.

  4. Run it on every build

    Start runs from your CI, for example with the Jenkins plugin.

Questions.Short answers.

What is firmware testing?

Firmware testing checks that embedded software works on the real hardware: flashing, boot, peripherals, timing, updates and recovery after a fault.

How is firmware testing different from software testing?

The result depends on the board, its state and its timing. A firmware test controls power, flashing and the console, and records them with the result.

Can we start before the hardware is ready?

Yes, in part. Visao analyzes the source without running it. Delta can inspect a firmware root file system offline. Tests can run on QEMU until the board arrives.

Which devices 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.

Do you offer firmware testing as a service?

Midair is a platform that runs your tests on your bench. In a pilot, our engineers help you connect the first bench and write the first suite.

Does Midair change our firmware?

No. Midair reports failures and findings with their evidence. TS Factory writes tests only in the test suite repository, on its own branch.

Start with one firmware failure.We connect the bench with you.

Compare the plans on the pricing page. Prices are monthly, in euros.

Start your pilot