Los simuladores de CPU integrados generalmente se pueden programar para simular también hardware. Todas las tecnologías de virtualización que no sean Xen hacen eso. Pero debe escribir un código que pretenda tener algunos registros en alguna dirección física o, en x86, una dirección en el bus de E / S, y luego debe responder a las lecturas y escrituras en estas direcciones como si su software fuera físico chip cuyo control y registros de estado se estaban accediendo.
Si desea hacer esto, sugeriría modificar QEMU. Pero no sería fácil. Este tipo de cosas generalmente solo se hace cuando está diseñando un chip personalizado con un microcontrolador y algunos otros núcleos para su E / S.
El sistema de desarrollo vendido por ARM Holdings ofrece esto y es más fácil trabajar con él que piratear QEMU, pero es muy costoso.
Hay varios emuladores ARM de código abierto que ejecutan una sola subrutina, que puede llamar a otras subrutinas, que puede usar para depurar y ajustar el rendimiento de las subrutinas que no dependen del acceso al hardware. Utilicé uno de estos con gran éxito para optimizar un cifrador AES para ARM7TDMI.
Puede escribir un arnés de prueba de unidad simple en C o C ++, vincular la clase o subrutina bajo prueba con él y luego ejecutarlo en el simulador.
He estado reflexionando sobre un problema similar durante años, cómo hacer una prueba unitaria del código del kernel de Linux o Mac OS X. Debería ser posible, pero nunca lo he intentado. Una posiblemente es construir un núcleo completo en lugar de probar su código de forma aislada, con el marco de prueba de la unidad vinculado directamente a su núcleo. Luego dispararía las pruebas unitarias desde algún tipo de interfaz externa.
Tal vez sería más productivo usar una herramienta de cobertura de código, luego probar su firmware como un paquete completo a través de su interfaz externa. La herramienta de cobertura encontraría rutas de código que aún no se habían probado, por lo que podría agregar pruebas externas adicionales en un intento de obtener más cobertura.