मैं एक साधारण कर्नेल मॉड्यूल लिख रहा हूं, जो एक इंटरप्ट पंजीकृत कर सकता है और इसे संभाल सकता है।सरल इंटरप्ट हैंडलर: request_irq त्रुटि कोड -22
ERROR: Cannot request IRQ 30 - code -22 , EIO 5 , EINVAL 22
मेरा मानना है कि इस त्रुटि कोड का EINVAL (अवैध तर्क)
कृपया बताने के लिए बराबर है: हालांकि, जब मैं request_irq कार्यप्रणाली को कॉल करके व्यवधान रजिस्टर करने के लिए प्रयास करते हैं, यह त्रुटि कोड -22 रिटर्न मैं, मैं क्या गलत कर रहा हूँ।
#include <linux/init.h>
#include <linux/module.h>
#include <linux/irq.h>
#include <linux/io.h>
#include <linux/irqdomain.h>
#include <linux/interrupt.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <asm/exception.h>
#include <asm/mach/irq.h>
void int068_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
printk("Interrupt should be handled there\n");
}
static int __init
clcdint_init(void)
{
unsigned int irq;
unsigned int irqflags;
int ret;
irq=68;
irqflags=IRQF_SHARED | IRQF_NO_SUSPEND;
ret = request_irq(irq, int068_interrupt,
irqflags, "clcdint-int068", NULL);
if (ret!=0) {
printk("ERROR: Cannot request IRQ %d", irq);
printk(" - code %d , EIO %d , EINVAL %d\n", ret, EIO, EINVAL);
}
printk("CLCDINT_INIT\n");
return 0;
}
module_init(clcdint_init);
static void __exit
clcdint_exit(void)
{
unsigned int irq;
irq=68;
free_irq(irq, NULL);
printk("CLCDINT_EXIT\n");
}
module_exit(clcdint_exit);
आपको बहुत बहुत धन्यवाद! मैंने 'irqflags = IRQF_NO_SUSPEND' बदल दिया है, 'अंत में यह काम कर रहा है! –
अंतिम टिप्पणी में उल्लिखित परिवर्तन को लागू करने के बाद भी, मुझे अभी भी एक ही त्रुटि संदेश मिल रहा है ("त्रुटि: आईआरक्यू 68 - कोड -22, ईआईओ 5, ईनवल 22" का अनुरोध नहीं कर सकता)। क्या आप जानते हैं कि इसका कारण क्या हो सकता है? (बीटीडब्ल्यू, मैं कर्नेल संस्करण 2.6.32 का उपयोग कर रहा हूं, इसलिए कुछ शामिल फाइलें यहां मौजूद नहीं हैं, शायद यह प्रासंगिक है) – jaff
समस्या आईआरक्यू संख्या के साथ करना था। Http://www.webopedia.com/quick_ref/IRQnumbers.asp पर देखने और आईआरक्यू संख्या को 10 में बदलकर, 0 एफ 68 के बजाय, सबकुछ काम कर रहा है। – jaff