错误:设备或资源正忙

时间:2011-11-30 22:43:59

标签: linux linux-kernel linux-device-driver interrupt-handling

我正在尝试编写一个简单的模块,它应该替换irq 1处理程序。并且我总是得到以下错误:' - 1设备或资源忙'。有什么方法可以解决它吗? 这是我的代码:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/workqueue.h>
#include <linux/interrupt.h>
#include <asm/io.h>


irqreturn_t myhandler(int irq, void *dev_id, struct pt_regs *regs) 
{
  printk(KERN_ALERT"\n\nMy interrupt handler\n\n");
  return IRQ_HANDLED;
}

int init_module()
{
  int res;
  free_irq(1, NULL);                  
  res = request_irq(1, (void*)myhandler,0, "my_handler", (void*)(myhandler)); 
  return res;
}

void cleanup_module()
{
  free_irq(1, NULL);
}
MODULE_LICENSE("GPL");

也许有人可以说出了什么问题。 PS。我正在使用2.6.39.3内核。

1 个答案:

答案 0 :(得分:1)

您在使用什么类型的系统(架构)?

在普通PC上,IRQ 1是8042(键盘控制器),并且已经有一个中断处理程序。您将{0}传递给request_irq() flags,因此您要求为非共享中断注册处理程序。核心内核中断代码将查看并且已经为该IRQ注册了另一个处理程序,并从-EBUSY返回request_irq

您不能通过为同一个IRQ注册另一个处理程序来覆盖现有的处理程序。您需要取消注册第一个,然后才能注册新的。

您可以查看/ proc / interrupts以查看系统上已经使用IRQ 1的内容。