Geralmente, os simuladores de CPU incorporados podem ser programados para simular hardware. Todas as tecnologias de virtualização diferentes do Xen fazem isso. Mas você precisa escrever um código que pretenda ter alguns registros em algum endereço físico ou, no x86, um endereço no barramento de E / S e, em seguida, responder às leituras e gravações nesses endereços como se o seu software fosse físico. chip cujos registros de controle e status estavam sendo acessados.
Se você quiser fazer isso, sugiro modificar o QEMU. Mas não seria fácil. Esse tipo de coisa geralmente é feito apenas quando você está projetando um chip personalizado com um microcontrolador e alguns outros núcleos para sua E / S.
O sistema de desenvolvimento vendido pela ARM Holdings prevê isso e provavelmente é mais fácil de trabalhar do que invadir o QEMU, mas é muito caro.
Existem vários emuladores ARM de código aberto que executam uma única sub-rotina, que por si só pode chamar outras sub-rotinas, que você pode usar para depuração, ajustando o desempenho de sub-rotinas que não dependem do acesso ao hardware. Eu usei um desses com grande sucesso para otimizar um criptografador AES para ARM7TDMI.
Você pode escrever um equipamento de teste de unidade simples em C ou C ++, vincular a classe ou sub-rotina em teste a ele e executá-lo no simulador.
Estou pensando em um problema semelhante há anos, como testar o código do kernel Linux ou Mac OS X na unidade. Deveria ser possível, mas nunca tentei. Uma possibilidade é construir um kernel completo em vez de testar seu código isoladamente, com a estrutura de teste de unidade vinculada diretamente ao seu kernel. Você acionaria os testes de unidade a partir de algum tipo de interface externa.
Talvez seja mais produtivo usar uma ferramenta de cobertura de código e testar seu firmware como um pacote completo por meio de sua interface externa. A ferramenta de cobertura encontraria caminhos de código que ainda não foram testados, para que você possa adicionar testes externos adicionais na tentativa de obter mais cobertura.