2013-02-14 64 views
5

में एआरएम इंटरप्ट हैंडलिंग मैं समझने की कोशिश कर रहा हूं कि क्यूईएमयू एआरएम प्रोसेसर के लिए इंटरप्ट कैसे संभालता है। मेरे पास एक नंगे धातु बाइनरी ब्लोब है (यानी, लिनक्स नहीं - बस कुछ असेंबली कोड) जो एआरएम 1176 के लिए बनाया गया था। क्यूईएमयू में चलाए जाने पर, प्रारंभिकरण के दौरान बाइनरी ब्लॉब में कोड सीपीएसआर के बिट 13 सेट करता है जो दर्शाता है कि इंटरप्ट वेक्टर टेबल 0xFFFF0000 पर स्थित है। जीडीबी को हुक अप करना और उस पते पर निर्देशों को डंप करना, मैं वास्तव में संबंधित इंटरप्ट वेक्टर टेबल देख सकता हूं। आईआरक्यू पर, यह 0xFFFF0018 पर कूदता है, जो सिर्फ 0xFFFF00070 पर कूदता है, जिसमें पहले irq_handler के लिए कोड होता है, और आखिरकार दूसरे irq_handler पर कूद जाता है।क्यूईएमयू

यह ठीक है, लेकिन जब मैं QEMU में इंटरप्ट्स को जोड़ना चाहता हूं तो मुझे लगता है कि हर संदर्भ में मेरा खुद का irq_handler है। यदि आप एक irq आवंटित करते हैं, तो मुझे qemu_irq_handler प्रदान करना होगा जो आईआरक्यू को निकाल दिया जाता है। लेकिन इस मामले में, मैं नहीं चाहता कि मेरा खुद का हैंडलर बुलाए। मैं मान रहा था कि क्यूईएमयू एआरएम प्रोसेसर का अनुकरण करेगा और 0xFFFF0018 पर कूद जाएगा, उदाहरण के लिए, मैंने qemu_set_irq() कहा और वहां कोड चलाने शुरू कर दिया।

मुझे यकीन है कि मेरी समझ में कुछ कमी है, लेकिन क्या कोई समस्या नहीं है कि क्यूईएमयू को इंटरप्ट वेक्टर टेबल पर कूदने के लिए और इंटरप्ट को ट्रिगर करते समय कोड चलाएं, उदाहरण के लिए, qemu_set_irq() के साथ?

उत्तर

1

मुझे लगता है कि क्यूईएमयू एआरएम के लिए Paravirtualization का उपयोग कर रहा है। पीसी पर एआरएम डिवाइस के लिए इंटरप्ट नियंत्रक नहीं है। मुझे लगता है कि qemu_irq_handler एक पैरावार्च्यूलाइजेशन तकनीक को बाधित करने के लिए तकनीक है। कहां से आने वाले हैं? देखें: QEMU tech document विशेष रूप से,

2,11 हार्डवेयर तेजी से होने की

व्यवधान के लिए, QEMU हर मूल ब्लॉक पर जांच नहीं की जाती है, तो एक हार्डवेयर व्यवधान लंबित है। इसके बजाए, उपयोगकर्ता को एक विशिष्ट कार्य को अतुल्यकालिक रूप से कॉल करना होगा ताकि यह बताने के लिए कि एक बाधा लंबित है। यह फ़ंक्शन वर्तमान में निष्पादित मूलभूत ब्लॉक की श्रृंखला को रीसेट करता है। यह सुनिश्चित करता है कि निष्पादन जल्द ही सीपीयू एमुलेटर के मुख्य पाश में वापस आ जाएगा। फिर मुख्य पाश परीक्षण कर सकता है अगर बाधा लंबित है और इसे संभालती है।

शायद क्यूईएमयू उपकरणों को अनुकरण करने के लिए कुछ कोड के साथ आता है। हालांकि, अगर आप अपने डिवाइस का उपयोग करना चाहते हैं, तो आपको कुछ कस्टम करने की आवश्यकता होगी। यह वास्तविक एआरएम प्रोसेसर नहीं है। अधिकांश आभासीकरण प्रौद्योगिकी have issues इंटरप्ट के साथ; यहां तक ​​कि वर्चुअलाइजेशन को उसी सीपीयू द्वारा लक्ष्य के रूप में होस्ट किया जाता है।

+2

वास्तव में, ऐसा लगता है कि 'cpu_interrupt (& env, CPU_INTERRUPT_HARD) को कॉल करना;' मैं यही देख रहा था। वह इंटरप्ट वेक्टर टेबल पर कूदता है और वहां से निष्पादन जारी रखता है। – user2071017