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í.
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.
Como funciona uma execução.Cinco passos, um registo.
-
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
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
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
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
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.
Escolher uma falha
Escolha um problema de firmware que hoje custa tempo à sua equipa.
Ligar uma bancada
Alimentação, consola e gravação para uma placa, através de uma máquina ao lado dela.
Escrever a primeira suite
Com o TS Factory, ou à mão no formato do Test Environment.
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