임베디드 CPU 시뮬레이터는 일반적으로 하드웨어를 시뮬레이션하도록 프로그래밍 할 수 있습니다. Xen 이외의 모든 가상화 기술이이를 수행합니다. 그러나 실제 주소 나 I / O 버스의 주소 인 x86에 레지스터가있는 척하는 코드를 작성해야합니다. 그러면 소프트웨어가 실제 주소 인 것처럼 이러한 주소에 대한 읽기 및 쓰기에 응답해야합니다. 제어 및 상태 레지스터에 액세스 한 칩
이 작업을 수행하려면 QEMU를 수정하는 것이 좋습니다. 그러나 쉽지 않습니다. 이러한 종류의 작업은 일반적으로 마이크로 컨트롤러 및 I / O를위한 다른 코어가있는 사용자 지정 칩을 설계 할 때만 수행됩니다.
ARM Holdings에서 판매하는 개발 시스템은이를 제공하며 QEMU를 해킹하는 것보다 작업하기가 쉽지만 매우 비쌉니다.
단일 서브 루틴을 실행하는 여러 개의 오픈 소스 ARM 에뮬레이터가 있으며,이 서브 루틴 자체는 다른 서브 루틴을 호출 할 수 있으며 하드웨어 액세스에 의존하지 않는 서브 루틴의 성능을 튜닝하는 데 사용할 수 있습니다. 이 중 하나를 사용하여 ARM7TDMI 용 AES 암호화기를 최적화했습니다.
C 또는 C ++로 간단한 단위 테스트 하니스를 작성하고 테스트중인 클래스 또는 서브 루틴을 링크 한 후 시뮬레이터에서 실행할 수 있습니다.
Linux 또는 Mac OS X 커널 코드를 단위로 테스트하는 방법에 대해 수년간 비슷한 문제를 고민해 왔습니다. 가능해야하지만 실제로 시도한 적이 없습니다. 유닛 테스트 프레임 워크를 커널에 직접 연결하여 코드를 개별적으로 테스트하는 대신 전체 커널을 빌드하는 것이 가능합니다. 그런 다음 일종의 외부 인터페이스에서 장치 테스트를 시작합니다.
코드 커버리지 도구를 사용하는 것이 더 생산적 일 수 있으며 외부 인터페이스를 통해 펌웨어를 완전한 패키지로 테스트 할 수 있습니다. 적용 범위 도구는 아직 테스트되지 않은 코드 경로를 찾으므로 더 많은 적용 범위를 얻기 위해 추가 외부 테스트를 추가 할 수 있습니다.