通常、組み込みCPUシミュレータは、ハードウェアもシミュレートするようにプログラムできます。Xen以外のすべての仮想化テクノロジーがこれを実行します。ただし、物理アドレスまたはx86のI / Oバスのアドレスにレジスタがあるふりをするコードを記述する必要があり、ソフトウェアが物理アドレスであるかのようにこれらのアドレスへの読み取りと書き込みに応答する必要があります制御およびステータスレジスタがアクセスされていたチップ。
これを行うには、QEMUを変更することをお勧めします。しかし、それは簡単ではありません。通常、この種のことは、マイクロコントローラとI / O用の他のコアを使用してカスタムチップを設計する場合にのみ行われます。
ARM Holdingsが販売する開発システムはこれを提供し、QEMUをハッキングするよりも簡単に操作できますが、非常に高価です。
単一のサブルーチンを実行する複数のオープンソースARMエミュレータがあり、それ自体が他のサブルーチンを呼び出すことができ、ハードウェアアクセスに依存しないサブルーチンのパフォーマンスのチューニングをデバッグするために使用できます。これらのいずれかを使用して、ARM7TDMIのAES暗号化を最適化することに成功しました。
CまたはC ++で単純な単体テストハーネスを作成し、テスト対象のクラスまたはサブルーチンをリンクして、シミュレータで実行できます。
LinuxまたはMac OS Xカーネルコードの単体テストの方法について、私は長年同様の問題を熟考してきました。それは可能であるはずですが、私は実際に試したことはありません。1つは、ユニットテストフレームワークをカーネルに直接リンクして、コードを単独でテストするのではなく、完全なカーネルを構築することです。次に、何らかの外部インターフェイスからユニットテストを実行します。
コードカバレッジツールを使用して、外部インターフェイスを介して完全なパッケージとしてファームウェアをテストする方が生産性が高い場合があります。カバレッジツールは、まだテストされていないコードパスを検出するため、さらにカバレッジを取得するために外部テストを追加できます。