एंबेडेड सीपीयू सिमुलेटर आमतौर पर हार्डवेयर का अनुकरण करने के लिए प्रोग्राम किया जा सकता है। एक्सएमएल के अलावा सभी वर्चुअलाइजेशन तकनीकें ऐसा करती हैं। लेकिन आपको ऐसे कोड लिखने की आवश्यकता है जो कुछ भौतिक पते पर या x86 पर, I / O बस पर एक पते पर कुछ रजिस्टर करने का दिखावा करते हैं, और फिर आपको इन पते पर पढ़ने और लिखने की आवश्यकता है जैसे कि आपका सॉफ़्टवेयर भौतिक था चिप जिसका नियंत्रण और स्थिति रजिस्टर एक्सेस किया जा रहा था।
यदि आप ऐसा करना चाहते हैं, तो मैं QEMU को संशोधित करने का सुझाव दूंगा। लेकिन यह आसान नहीं होगा। इस तरह की बात आमतौर पर केवल तब की जाती है जब आप अपने आई / ओ के लिए एक माइक्रोकंट्रोलर और कुछ अन्य कोर के साथ एक कस्टम चिप डिजाइन कर रहे होते हैं।
एआरएम होल्डिंग्स द्वारा बेची गई विकास प्रणाली इसके लिए प्रदान करती है और QEMU पर हैकिंग की तुलना में काम करना आसान है, लेकिन बहुत महंगा है।
ऐसे कई ओपन सोर्स एआरएम एमुलेटर हैं जो एक एकल सबरूटीन चलाते हैं, जो खुद अन्य सबरूटीन्स को कॉल कर सकते हैं, जिसका उपयोग आप सबरूटीन्स के प्रदर्शन को ट्यूनिंग के लिए कर सकते हैं जो हार्डवेयर एक्सेस पर निर्भर नहीं होते हैं। मैंने इनमें से एक को ARM7TDMI के लिए एईएस एनक्रिप्ट करने वाले को बड़ी सफलता के लिए इस्तेमाल किया।
आप C या C ++ में एक साधारण यूनिट टेस्ट हार्नेस लिख सकते हैं, टेस्ट के तहत क्लास या सबरूटीन को लिंक कर सकते हैं, फिर इसे सिम्युलेटर में चला सकते हैं।
मैं वर्षों से इसी तरह की समस्या को हल कर रहा हूं, कैसे लिनक्स या मैक ओएस एक्स कर्नेल कोड का परीक्षण करें। यह संभव होना चाहिए, लेकिन मैंने वास्तव में कभी कोशिश नहीं की। एक संभवतः आपके कोड को अलगाव में अपने कोड के परीक्षण के बजाय एक पूर्ण कर्नेल का निर्माण करना है, यूनिट टेस्ट फ्रेमवर्क के साथ सीधे आपके कर्नेल में जुड़ा हुआ है। फिर आप किसी प्रकार के बाहरी इंटरफ़ेस से इकाई परीक्षणों को बंद कर देंगे।
शायद यह एक कोड कवरेज टूल का उपयोग करने के लिए अधिक उत्पादक होगा, फिर अपने फर्मवेयर को उसके बाहरी इंटरफ़ेस के माध्यम से एक पूर्ण पैकेज के रूप में परीक्षण करें। कवरेज टूल को कोड पथ मिलेंगे जो अभी तक परीक्षण नहीं किए गए थे, इसलिए आप अधिक कवरेज प्राप्त करने के प्रयास में अतिरिक्त बाहरी परीक्षण जोड़ सकते हैं।