এম্বেডড সিপিইউ সিমুলেটরগুলি সাধারণত হার্ডওয়্যার অনুকরণ করার জন্য প্রোগ্রাম করা যায়। জেন ব্যতীত সমস্ত ভার্চুয়ালাইজেশন প্রযুক্তিগুলি এটি করে। তবে আপনাকে এমন কোড লিখতে হবে যা কিছু শারীরিক ঠিকানায় বা রেজিস্ট্রেশন করার ভান করে বা x / 8, I / O বাসে একটি ঠিকানা, এবং তারপরে আপনাকে এই ঠিকানাগুলিতে পড়ার এবং লেখার জন্য প্রতিক্রিয়া জানাতে হবে যেমন আপনার সফ্টওয়্যারটি কোনও শারীরিক ছিল চিপ যার নিয়ন্ত্রণ এবং স্থিতি রেজিস্টার অ্যাক্সেস করা হচ্ছে।
আপনি যদি এটি করতে চান তবে আমি কিউইউএমইউ পরিবর্তন করার পরামর্শ দেব would তবে এটি সহজ হবে না। এই ধরণের জিনিসটি কেবল তখনই করা হয় যখন আপনি নিজের আই / ও-র জন্য কোনও মাইক্রোকন্ট্রোলার এবং কিছু অন্যান্য কোর দিয়ে একটি কাস্টম চিপ ডিজাইন করছেন।
এআরএম হোল্ডিংস দ্বারা বিক্রি করা উন্নয়ন ব্যবস্থা এটির জন্য সরবরাহ করে এবং কিউইএমইউতে হ্যাকিংয়ের চেয়ে কাজ করা সম্ভবত সহজ, তবে এটি খুব ব্যয়বহুল।
একাধিক ওপেন সোর্স এআরএম এমুলেটর রয়েছে যা একটি একক সাবরুটিন চালায়, যা নিজেই অন্য সাবরুটাইনগুলিকে কল করতে পারে, যা আপনি হার্ডওয়্যার অ্যাক্সেসের উপর নির্ভর করে না এমন সাবরুটাইনগুলির পারফরম্যান্স টিউনিং টিউনিংয়ের জন্য ব্যবহার করতে পারেন। এআরএম 7 টিটিএমআইয়ের জন্য একটি এইএস এনক্রিপ্টর অনুকূল করতে আমি এগুলির একটি দুর্দান্ত সাফল্যের জন্য ব্যবহার করেছি।
আপনি সি বা সি ++ তে একটি সাধারণ ইউনিট পরীক্ষার জোতা লিখতে পারেন, এটির সাথে ক্লাস বা সাব্রোটিনকে পরীক্ষার অধীনে লিঙ্ক করতে পারেন, তারপরে এটি সিমুলেটারে চালান।
লিনাক্স বা ম্যাক ওএস এক্স কার্নেল কোডটি কীভাবে পরীক্ষা করতে হয় তা আমি বছরের পর বছর ধরে একই ধরণের সমস্যা নিয়ে ভাবছি। এটি সম্ভব হওয়া উচিত, তবে আমি বাস্তবে কখনও চেষ্টা করি নি। একটি সম্ভবত আপনার কোডকে বিচ্ছিন্নভাবে পরীক্ষা করার পরিবর্তে একটি সম্পূর্ণ কার্নেল তৈরি করা, ইউনিট পরীক্ষার কাঠামোটি সরাসরি আপনার কর্নেলের সাথে যুক্ত। এরপরে আপনি একরকম বাহ্যিক ইন্টারফেস থেকে ইউনিট পরীক্ষা বন্ধ করে দেবেন।
একটি কোড কভারেজ সরঞ্জাম ব্যবহার করা আরও উত্পাদনশীল হতে পারে, তারপরে আপনার ফার্মওয়্যারটিকে একটি সম্পূর্ণ প্যাকেজ হিসাবে তার বাহ্যিক ইন্টারফেসের মাধ্যমে পরীক্ষা করুন। কভারেজ সরঞ্জামটি এমন কোড পাথগুলি সন্ধান করবে যা এখনও পরীক্ষা করা হয়নি, সুতরাং আপনি আরও কভারেজ পাওয়ার প্রয়াসে অতিরিক্ত বাহ্যিক পরীক্ষা যুক্ত করতে পারেন।