linux do_irq 报错 代码,linux - 内核函数asm_do_IRQ()中的irq与我在模块中请求的不同 - 堆栈内存溢出...

我做了一些皮质-A9开发板的实验。 我使用gpio_to_irq()获取irq num并且我请求了irq并用它写了一个小驱动程序,它在syslog中是196。 我在asm_do_IRQ中添加了一些printks。 当我触发gpio中断时,驱动程序工作正常,但asm_do_IRQ中的irq num为62.我无法理解。 为什么irq号码与我要求的号码不同? 司机如下:

#include

#include

#include

#include

#define GPIO_N 36 //gpio number

int flag = 0;

static irqreturn_t handler(int irq,void *dev_id)

{

printk("hello world hahahahahhahahah \n\n");

return 0;

}

static int __init gpio_test_init(void)

{

if(gpio_request_one(GPIO_N,GPIOF_DIR_IN,"some test")<0)

{

printk(KERN_ERR "Oops! BAD! BAD! BAD!\n\n");

return 0;

}

int irq,irq2;

irq = OMAP_GPIO_IRQ(TEST_GPIO);

printk("irq : %d \n",irq,irq2);

// ..................

// irq : 196 in dmesg

//......................

set_irq_type(irq,IRQ_TYPE_EDGE_FALLING);

enable_irq(gpio_to_irq(GPIO_N));

int err;

// request the irq ...

if((err = request_irq(irq,&handler,0,NULL,NULL))<0)

{

printk("err : %d\n",err);

return 0;

}

printk("gpio test init success!\n");

flag = 1;

return 0;

}

static void __exit gpio_test_exit(void)

{

int irq = gpio_to_irq(TEST_GPIO);

if(flag == 1)free_irq(irq,NULL);

gpio_free(TEST_GPIO);

printk("gpio test exit byebye!\n");

}

module_init(gpio_test_init);

module_exit(gpio_test_exit);

MODULE_LICENSE("GPL");

arch / arm / kernel / irq.c中的asm_do_IRQ

asmlinkage void __exception_irq_entry

asm_do_IRQ(unsigned int irq, struct pt_regs *regs)

{

struct pt_regs *old_regs = set_irq_regs(regs);

printk("the irq : %d\n",irq);

//...............

// I get 62 here

//...............

irq_enter();

/*

* Some hardware gives randomly wrong interrupts. Rather

* than crashing, do something sensible.

*/

if (unlikely(irq >= nr_irqs)) {

if (printk_ratelimit())

printk(KERN_WARNING "Bad IRQ%u\n", irq);

ack_bad_irq(irq);

} else {

generic_handle_irq(irq);

}

/* AT91 specific workaround */

irq_finish(irq);

irq_exit();

set_irq_regs(old_regs);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值