aww*_*wws 5 c module interrupt linux-kernel
request_irq的原型是:
int request_irq ( unsigned int irq,
irq_handler_t handler,
unsigned long irqflags,
const char * devname,
void * dev_id);
Run Code Online (Sandbox Code Playgroud)
我注意到一个类似的问题"简单的中断处理程序:request_irq返回错误代码-22",但我没有使用IRQF_SHARED标志,所以没有理由它可能与dev_id为NULL冲突.但它仍然无法注册测试irq,而errno总是如此-22(-EINVAL).
这是我简单的irq测试模块:
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/types.h>
#include <linux/interrupt.h>
static irqreturn_t irq_handle(int irq, void *dev_id)
{
printk("irq happened\n");
return IRQ_HANDLED;
}
static int irq_test_init(void)
{
int rc = request_irq(50, irq_handle, IRQF_DISABLED, "irq_test", NULL);
if(rc!=0){
printk(KERN_INFO "fail to register test irq, errno:%d\n",rc);
return -1;
}
printk(KERN_INFO "success request irq\n");
return 0;
}
static void irq_test_exit(void)
{
free_irq(50, NULL);
printk(KERN_INFO "irq module removed!\n");
return;
}
module_init(irq_test_init);
module_exit(irq_test_exit);
MODULE_LICENSE("GPL");
Run Code Online (Sandbox Code Playgroud)