- 论坛徽章:
- 0
|
想写个中断驱动模块,从网上找的。。。但是从加载上,从来看cat/proc/interrupt,次数都是0,怎么触发中断,另外,enable_irq和request_irq的关系,disable_irq和free_irq的关系
#include <linux/module.h>
#include <linux/init.h>
#include <linux/interrupt.h>
static int irq;
static char *interface;
module_param(interface,charp,0644);//表示这个参数要在插入模块时给出值
module_param(irq,int,0644);
int dev_id=127;
static irqreturn_t myinterrupt(int irq,void *dev_id)//中断服务程序
{
static int count = 0;
if(count<10) {
printk("interrupt :%d,%d\n",irq,*(int *)dev_id);
count++;
}
return IRQ_NONE;
}
static int __init myirqtest_init(void)
{
printk("my module worked\n");
if(request_irq(irq,&myinterrupt,IRQF_SHARED,interface,&dev_id)){//注册中断
printk(KERN_ERR "myirqtest:cannot register IRQ %d\n",irq);
return -EIO;
}
printk("%s request on irq %d success ,dev_id is %d\n",interface,irq,dev_id);
return 0;
}
static void __exit myirqtest_exit(void)
{
printk("unloading my module\n");
free_irq(irq,&irq);
printk("freeing IRQ %d\n",irq);
}
module_init(myirqtest_init);
module_exit(myirqtest_exit);
MODULE_LICENSE("GPL");
~
~
|
|