Các trình giả lập CPU nhúng thường có thể được lập trình để mô phỏng phần cứng. Tất cả các công nghệ ảo hóa khác ngoài Xen làm điều đó. Nhưng bạn cần viết mã giả vờ có một số thanh ghi tại một số địa chỉ vật lý hoặc, trên x86, một địa chỉ trên bus I / O, và sau đó bạn cần trả lời đọc và ghi vào các địa chỉ này như thể phần mềm của bạn là vật lý chip có bộ điều khiển và thanh ghi trạng thái đang được truy cập.
Nếu bạn muốn làm điều này, tôi sẽ đề nghị sửa đổi QEMU. Nhưng nó sẽ không dễ dàng. Loại điều này thường chỉ được thực hiện khi bạn đang thiết kế chip tùy chỉnh với vi điều khiển và một số lõi khác cho I / O của bạn.
Hệ thống phát triển được bán bởi ARM Holdings cung cấp cho điều này và có khả năng hoạt động dễ dàng hơn so với hack trên QEMU, nhưng rất tốn kém.
Có một số trình giả lập ARM mã nguồn mở chạy một chương trình con duy nhất, mà chính nó có thể gọi các chương trình con khác, mà bạn có thể sử dụng để gỡ lỗi điều chỉnh hiệu năng của các chương trình con không phụ thuộc vào truy cập phần cứng. Tôi đã sử dụng một trong những thứ này để thành công lớn để tối ưu hóa bộ mã hóa AES cho ARM7TDMI.
Bạn có thể viết một khai thác kiểm tra đơn vị đơn giản bằng C hoặc C ++, liên kết lớp hoặc chương trình con được kiểm tra với nó, sau đó chạy nó trong trình giả lập.
Tôi đã suy nghĩ một vấn đề tương tự trong nhiều năm, làm thế nào để kiểm tra mã hạt nhân Linux hoặc Mac OS X. Điều đó là có thể, nhưng tôi chưa bao giờ thực sự thử. Một cách có thể là xây dựng một kernel đầy đủ thay vì kiểm tra mã của bạn một cách riêng lẻ, với khung kiểm tra đơn vị được liên kết trực tiếp vào kernel của bạn. Sau đó, bạn sẽ loại bỏ các bài kiểm tra đơn vị từ một số loại giao diện bên ngoài.
Có lẽ sẽ hiệu quả hơn khi sử dụng một công cụ bao phủ mã, sau đó kiểm tra phần sụn của bạn như một gói hoàn chỉnh thông qua giao diện bên ngoài. Công cụ bảo hiểm sẽ tìm các đường dẫn mã chưa được thử nghiệm, do đó bạn có thể thêm các thử nghiệm bên ngoài bổ sung để cố gắng có thêm phạm vi bảo hiểm.