小编aww*_*wws的帖子

request_irq返回-22(-EINVAL)

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; …
Run Code Online (Sandbox Code Playgroud)

c module interrupt linux-kernel

5
推荐指数
0
解决办法
1561
查看次数

标签 统计

c ×1

interrupt ×1

linux-kernel ×1

module ×1