当前位置: 技术问答>linux和unix
中断向量注册的问题
来源: 互联网 发布时间:2016-12-18
本文导语: static unsigned int mems_irq = 100; static irqreturn_t mems_irq_handler(int irq,void *dev_id) { printk(KERN_INFO "Test interrupt mechanism...n"); return IRQ_HANDLED; } //下面是添加在mems_open()里面的: int flags = request_irq(mems_irq,mems_irq_handler,IRQ...
static unsigned int mems_irq = 100;
static irqreturn_t mems_irq_handler(int irq,void *dev_id)
{
printk(KERN_INFO "Test interrupt mechanism...n");
return IRQ_HANDLED;
}
//下面是添加在mems_open()里面的:
int flags = request_irq(mems_irq,mems_irq_handler,IRQF_DISABLED,"mem-test",NULL);
if(flags)
printk(KERN_INFO "Some error happened...%dn",flags);
但是,总是出错,在request_irq()的时候,flags的值是-22,我是想测试下中断机制的。对着内核代码看了半天,不直到问题在哪。
多谢指点。
static irqreturn_t mems_irq_handler(int irq,void *dev_id)
{
printk(KERN_INFO "Test interrupt mechanism...n");
return IRQ_HANDLED;
}
//下面是添加在mems_open()里面的:
int flags = request_irq(mems_irq,mems_irq_handler,IRQF_DISABLED,"mem-test",NULL);
if(flags)
printk(KERN_INFO "Some error happened...%dn",flags);
但是,总是出错,在request_irq()的时候,flags的值是-22,我是想测试下中断机制的。对着内核代码看了半天,不直到问题在哪。
多谢指点。
|
你说返回值为-22,表明是无效的参数。从你request_irq来看,最大的"嫌疑"就是中断号了。你可以先申请一个小点的中断号试试。
你确定100上能产生中断么?
你确定100上能产生中断么?
|
不知道你驱动跑在什么硬件平台上的?
如果是一个32位的处理器的硬中断从0~31,也就是一个寄存器的长度,中断号可以复用的,多个设备可以共享一个中断号,这时候标志位就要设置成SHARE
如果是一个32位的处理器的硬中断从0~31,也就是一个寄存器的长度,中断号可以复用的,多个设备可以共享一个中断号,这时候标志位就要设置成SHARE