Chinaunix首页 | 论坛 | 博客
  • 博客访问: 106059
  • 博文数量: 17
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 184
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-20 11:19
个人简介

学习内核中~

文章分类

全部博文(17)

文章存档

2013年(17)

我的朋友

分类: LINUX

2013-05-28 13:21:23

注册一个中断处理程序的request_irq函数的声明如下:

点击(此处)折叠或打开

  1. int request_irq(unsigned int irq,
  2. irq_handler_t handler,
  3. unsigned long flags,
  4. const char *name,
  5. void *dev)
我们可以在同一个驱动程序中给同一个中断号注册多个处理程序(虽然没什么意义),使用同一个name参数来注册也没关系,name参数的作用只是让注册的中断处理程序出现在/proc/interrupts,只有与用户通信的作用。如果是共享中断号,那么要传进正确的dev参数,如果你给一个中断号注册两个使用同一个dev参数的处理程序,那么在执行free_irq的时候会死机,因为内核无法确定要释放哪个中断处理程序。
中断处理程序如下:

点击(此处)折叠或打开

  1. #include <linux/init.h>
  2. #include <linux/module.h>
  3. #include <linux/interrupt.h>

  4. static void main_exit(void);

  5. int identity1 = 0;
  6. int identity2 = 0;

  7. static irqreturn_t my_interrupt1(int irq, void *identity)
  8. {
  9.     printk(KERN_INFO "keyboard interrupt occured 1n");
  10.     return IRQ_HANDLED;
  11. }

  12. static irqreturn_t my_interrupt2(int irq, void *identity)
  13. {
  14.     printk(KERN_INFO "keyboard interrupt occured 2n");
  15.     return IRQ_HANDLED;
  16. }

  17. static int main_init(void)
  18. {
  19.     if (request_irq(1, my_interrupt1, IRQF_SHARED, "my_interrupt", &identity1)) {
  20.     return -EIO;
  21.     }
  22.     if (request_irq(1, my_interrupt2, IRQF_SHARED, "my_interrupt", &identity2)) {
  23.     free_irq(1, &identity1);
  24.     return -EIO;
  25.     }
  26.     return 0;
  27. }

  28. static void main_exit(void)
  29. {
  30.     free_irq(1, &identity2);
  31.     free_irq(1, &identity1);
  32. }

  33. module_init(main_init);
  34. module_exit(main_exit);
dmesg | tail后输出是:
[  375.623855] keyboard interrupt occured 1
[  375.623863] keyboard interrupt occured 2
[  375.671814] keyboard interrupt occured 1
[  375.671822] keyboard interrupt occured 2
[  375.789948] keyboard interrupt occured 1
[  375.789958] keyboard interrupt occured 2
[  375.850725] keyboard interrupt occured 1
[  375.850731] keyboard interrupt occured 2
[  375.999368] keyboard interrupt occured 1
[  375.999376] keyboard interrupt occured 2

阅读(1752) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~