Вбудовані симулятори процесора, як правило, можуть бути запрограмовані також для імітації апаратних засобів. Це роблять усі технології віртуалізації, окрім Xen. Але вам потрібно написати код, який робить вигляд, що у деяких фізичних адресах є деякі регістри або, на x86, адреса на шині вводу / виводу, і тоді вам потрібно буде відповідати на читання та запис на ці адреси так, ніби ваше програмне забезпечення було фізичним чіп, чиї регістри контролю та статусу були доступні.
Якщо ви хочете це зробити, я б запропонував змінити QEMU. Але це було б непросто. Такі речі, як правило, робляться лише тоді, коли ви розробляєте власну мікросхему з мікроконтролером та деякими іншими ядрами для свого вводу / виводу.
Система розробки, що продається ARM Holdings, передбачає це і, ймовірно, легше працювати, ніж злом на QEMU, але дуже дорога.
Існує кілька емуляторів ARM з відкритим кодом, які запускають одну підпрограму, яка сама може викликати інші підпрограми, які можна використовувати для налагодження налаштування продуктивності підпрограм, які не залежать від апаратного доступу. Я з великим успіхом використав один із них, щоб оптимізувати шифр AES для ARM7TDMI.
Ви можете написати простий тестовий джгут на C або C ++, зв’язати з ним клас або підпрограму, яку перевіряють, а потім запустити в тренажері.
Я багато років обмірковував подібну проблему, як встановити тест коду ядра Linux або Mac OS X. Це повинно бути можливо, але я ніколи насправді не намагався. Можливо, це створити повне ядро, а не тестувати свій код окремо, при цьому тестова рамка блоку пов'язана безпосередньо у вашому ядрі. Потім ви знімете тестові пристрої з якогось зовнішнього інтерфейсу.
Можливо, було б більш продуктивним використовувати інструмент покриття коду, а потім протестувати свою прошивку як повний пакет через його зовнішній інтерфейс. Інструмент покриття знайде шляхи коду, які ще не були протестовані, тож ви можете додати додаткові зовнішні тести, щоб спробувати отримати більше покриття.