Serviços de testes de firmware para dispositivos embebidos

O Midair grava o seu firmware em placas reais, executa os testes, acompanha a consola série e guarda as evidências de cada execução.

Comece por uma falha de firmware que custa tempo à sua equipa. Um piloto liga uma bancada e uma suite, e cresce a partir daí.

run 412 · bench lab-2 · fw 2.4.1 Exemplo de execução
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

O que são testes de firmware.E porque um portátil não chega.

Os testes de firmware verificam que o software dentro de um dispositivo funciona no hardware real. Cobrem a gravação, o arranque, os periféricos, a temporização, as atualizações e a recuperação depois de uma falha.

Os testes unitários num portátil não apanham a maior parte disto. Muitos erros de firmware só aparecem numa revisão da placa, após horas em funcionamento ou com um corte de energia no momento errado.

Por isso, um teste de firmware controla a bancada além do código: a alimentação, a gravação, a consola e as ligações aos periféricos. Também regista tudo isto junto ao resultado.

Onde o firmware falha.Seis momentos na vida de um dispositivo.

Escolha um momento para ver o que corre mal e o que o teste faz nesse caso.

Gravação

O que corre mal
A escrita para a meio, ou a imagem não cabe na partição numa das revisões da placa.
O que o teste faz
Gravar a imagem, lê-la de volta para a verificar e esperar que a placa volte a responder depois do reinício.
O que o Midair guarda
A imagem, o resultado da leitura de verificação e a saída da consola.

Arranque

O que corre mal
O bootloader arranca a imagem errada, ou um driver bloqueia num periférico.
O que o teste faz
Acompanhar o U-Boot e o kernel na consola série e medir o tempo de cada fase do arranque.
O que o Midair guarda
O log completo da consola, separado por teste.

Execução

O que corre mal
Um sensor responde tarde quando há carga, ou duas interrupções entram em concorrência.
O que o teste faz
Controlar GPIO, I2C, SPI e CAN a partir do teste e verificar o que o firmware responde.
O que o Midair guarda
Cada veredicto ao lado do veredicto esperado, com os parâmetros do teste.

Funcionamento prolongado

O que corre mal
Há uma fuga lenta de memória, um contador dá a volta e o watchdog reinicia o dispositivo ao fim de trinta horas.
O que o teste faz
Manter o cenário a correr, acompanhar a memória durante a execução e apanhar o reinício pelo watchdog.
O que o Midair guarda
A cronologia da execução, com o reinício marcado.

Atualização

O que corre mal
A versão nova não consegue ler a configuração que a versão antiga escreveu.
O que o teste faz
Gravar a versão N, depois a N+1, e executar a mesma suite nas duas.
O que o Midair guarda
Duas execuções, cada uma com a sua configuração e os seus commits fixados.

Corte de energia

O que corre mal
A energia falha durante uma escrita e o dispositivo não volta a arrancar.
O que o teste faz
Cortar a alimentação num momento escolhido, através de uma PDU, de um relé ou de um hub USB. Depois, verificar que o dispositivo recupera.
O que o Midair guarda
O momento do corte, a consola antes e depois, e o veredicto.

A bancada, controlada pelo teste.Todas as ligações de que o teste precisa.

Um agente de teste corre numa máquina ao lado do dispositivo. Através dele, o teste chega a todas as ligações que um engenheiro usaria à mão. O dispositivo não precisa de agente.

QEMU SoC PWR UART USB JTAG GPIO CAN ETH Dispositivo em teste

Como funciona uma execução.Cinco passos, um registo.

  1. 1
    Visao

    Verificar o código antes de o executar

    O Visao analisa o código-fonte em C, C++ e assembly com a sua toolchain cruzada, por exemplo arm-none-eabi-gcc. Com o perfil MISRA C:2012, cada ocorrência indica o número da regra. Com uma linha de base, só reporta as ocorrências novas.

    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

    Gravar e arrancar a placa

    A máquina de teste grava a imagem, verifica-a e desliga e volta a ligar a placa. A consola série entra no log da execução desde a primeira linha do 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

    Executar a suite

    Cada teste tem um veredicto esperado, e o Midair compara-o com o veredicto obtido. Descreva um teste novo em palavras simples, e o TS Factory escreve-o no repositório da suite, num branch próprio.

    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

    Inspecionar o dispositivo

    O Delta verifica o dispositivo em execução, ou o sistema de ficheiros raiz do firmware sem o arrancar: portas abertas, ficheiros de persistência, binários e o seu hardening. Compara o resultado com uma linha de base e lista o que apareceu ou desapareceu.

    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

    Guardar um único registo

    O Midair guarda a execução com a configuração, os commits fixados, os logs e os veredictos. Nunca escreve por cima de uma execução, por isso a mesma falha pode voltar a ser aberta no mês seguinte.

    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

Como começa um piloto.Uma falha, depois o resto.

  1. Escolher uma falha

    Escolha um problema de firmware que hoje custa tempo à sua equipa.

  2. Ligar uma bancada

    Alimentação, consola e gravação para uma placa, através de uma máquina ao lado dela.

  3. Escrever a primeira suite

    Com o TS Factory, ou à mão no formato do Test Environment.

  4. Executá-la em cada build

    Lance as execuções a partir da sua CI, por exemplo com o plugin para Jenkins.

Perguntas.Respostas curtas.

O que são testes de firmware?

Os testes de firmware verificam que o software embebido funciona no hardware real: gravação, arranque, periféricos, temporização, atualizações e recuperação depois de uma falha.

Em que diferem os testes de firmware dos testes de software?

O resultado depende da placa, do seu estado e da sua temporização. Um teste de firmware controla a alimentação, a gravação e a consola, e regista-as com o resultado.

Podemos começar antes de o hardware estar pronto?

Sim, em parte. O Visao analisa o código-fonte sem o executar. O Delta pode inspecionar offline o sistema de ficheiros raiz de um firmware. Os testes podem correr no QEMU até a placa chegar.

Com que dispositivos funciona o Midair?

Os testes chegam à placa através de uma máquina ao lado dela, por isso a placa não precisa de agente. O Delta corre em Linux embebido em x86_64, AArch64, ARMv7, RISC-V e MIPS. O Visao analisa código compilado com toolchains cruzadas, incluindo alvos bare-metal.

Oferecem testes de firmware como serviço?

O Midair é uma plataforma que executa os seus testes na sua bancada. Num piloto, os nossos engenheiros ajudam a ligar a primeira bancada e a escrever a primeira suite.

O Midair altera o nosso firmware?

Não. O Midair reporta falhas e ocorrências com as respetivas evidências. O TS Factory só escreve testes no repositório da suite de testes, num branch próprio.

Comece por uma falha de firmware.Ligamos a bancada consigo.

Compare os planos na página de preços. Os preços são mensais, em euros.

Iniciar o seu piloto