में एआरएम इंटरप्ट हैंडलिंग मैं समझने की कोशिश कर रहा हूं कि क्यूईएमयू एआरएम प्रोसेसर के लिए इंटरप्ट कैसे संभालता है। मेरे पास एक नंगे धातु बाइनरी ब्लोब है (यानी, लिनक्स नहीं - बस कुछ असेंबली कोड) जो एआरएम 1176 के लिए बनाया गया था। क्यूईएमयू में चलाए जाने पर, प्रारंभिकरण के दौरान बाइनरी ब्लॉब में कोड सीपीएसआर के बिट 13 सेट करता है जो दर्शाता है कि इंटरप्ट वेक्टर टेबल 0xFFFF0000
पर स्थित है। जीडीबी को हुक अप करना और उस पते पर निर्देशों को डंप करना, मैं वास्तव में संबंधित इंटरप्ट वेक्टर टेबल देख सकता हूं। आईआरक्यू पर, यह 0xFFFF0018
पर कूदता है, जो सिर्फ 0xFFFF00070
पर कूदता है, जिसमें पहले irq_handler के लिए कोड होता है, और आखिरकार दूसरे irq_handler पर कूद जाता है।क्यूईएमयू
यह ठीक है, लेकिन जब मैं QEMU में इंटरप्ट्स को जोड़ना चाहता हूं तो मुझे लगता है कि हर संदर्भ में मेरा खुद का irq_handler है। यदि आप एक irq आवंटित करते हैं, तो मुझे qemu_irq_handler
प्रदान करना होगा जो आईआरक्यू को निकाल दिया जाता है। लेकिन इस मामले में, मैं नहीं चाहता कि मेरा खुद का हैंडलर बुलाए। मैं मान रहा था कि क्यूईएमयू एआरएम प्रोसेसर का अनुकरण करेगा और 0xFFFF0018
पर कूद जाएगा, उदाहरण के लिए, मैंने qemu_set_irq()
कहा और वहां कोड चलाने शुरू कर दिया।
मुझे यकीन है कि मेरी समझ में कुछ कमी है, लेकिन क्या कोई समस्या नहीं है कि क्यूईएमयू को इंटरप्ट वेक्टर टेबल पर कूदने के लिए और इंटरप्ट को ट्रिगर करते समय कोड चलाएं, उदाहरण के लिए, qemu_set_irq()
के साथ?
वास्तव में, ऐसा लगता है कि 'cpu_interrupt (& env, CPU_INTERRUPT_HARD) को कॉल करना;' मैं यही देख रहा था। वह इंटरप्ट वेक्टर टेबल पर कूदता है और वहां से निष्पादन जारी रखता है। – user2071017