Simulator CPU tertanam umumnya dapat diprogram untuk juga mensimulasikan perangkat keras. Semua teknologi virtualisasi selain Xen melakukan itu. Tetapi Anda perlu menulis kode yang berpura-pura memiliki beberapa register di beberapa alamat fisik atau, pada x86, alamat pada bus I / O, dan kemudian Anda perlu merespons membaca dan menulis ke alamat-alamat ini seolah-olah perangkat lunak Anda adalah fisik. chip yang kontrol dan status registernya sedang diakses.
Jika Anda ingin melakukan ini, saya akan menyarankan memodifikasi QEMU. Tapi itu tidak mudah. Hal semacam ini umumnya hanya dilakukan ketika Anda merancang chip khusus dengan mikrokontroler dan beberapa core lainnya untuk I / O Anda.
Sistem pengembangan yang dijual oleh ARM Holdings menyediakan ini dan kemungkinan lebih mudah untuk dikerjakan daripada meretas QEMU, tetapi sangat mahal.
Ada beberapa emulator ARM Open Source yang menjalankan subrutin tunggal, yang dengan sendirinya dapat memanggil subrutin lain, yang dapat Anda gunakan untuk debugging tuning kinerja subrutin yang tidak bergantung pada akses perangkat keras. Saya menggunakan salah satu dari ini untuk sukses besar untuk mengoptimalkan enkripsi AES untuk ARM7TDMI.
Anda bisa menulis unit test harness sederhana dalam C atau C ++, menghubungkan kelas atau subrutin yang sedang diuji, lalu menjalankannya di simulator.
Saya telah merenungkan masalah yang sama selama bertahun-tahun, bagaimana unit menguji Linux atau kode kernel Mac OS X. Seharusnya mungkin, tetapi saya belum pernah benar-benar mencobanya. Salah satunya adalah membangun kernel penuh daripada menguji kode Anda secara terpisah, dengan kerangka kerja unit test yang terhubung langsung ke kernel Anda. Anda kemudian akan mematikan tes unit dari beberapa jenis antarmuka eksternal.
Mungkin akan lebih produktif untuk menggunakan alat jangkauan kode, kemudian menguji firmware Anda sebagai paket lengkap melalui antarmuka eksternal. Alat jangkauan akan menemukan jalur kode yang belum diuji, sehingga Anda kemudian dapat menambahkan tes eksternal tambahan dalam upaya untuk mendapatkan lebih banyak cakupan.