Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5018560
  • 博文数量: 891
  • 博客积分: 17977
  • 博客等级: 上将
  • 技术积分: 8636
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-26 09:59
个人简介

一个好老好老的老程序员了。

文章分类

全部博文(891)

文章存档

2020年(8)

2019年(40)

2018年(88)

2017年(130)

2015年(5)

2014年(12)

2013年(41)

2012年(36)

2011年(272)

2010年(1)

2009年(53)

2008年(65)

2007年(47)

2006年(81)

2005年(12)

分类: LINUX

2011-06-06 12:18:07

在调试该程序的时候请保证调试了2.6内核模块编程之<< Hello World! >>内的程序,并且对中断有了一定的学习。

/*myirq.c*/
#include
#include
#include

static int irq;
static char *interface;

module_param(interface,charp,0644);
module_param(irq,int,0644);

//static irq_handler_t myinterrupt(int irq, void *dev_id, struct pt_regs *regs)

static irqreturn_t myinterrupt(int irq, void *dev_id)
{
static int mycount = 0;
static long mytime = 0;
struct net_device *dev=(struct net_device *)dev_id;

if(mycount==0){
mytime=jiffies;
}
//count the interval between two irqs
if (mycount < 10) {
mytime=jiffies-mytime;
printk(“Interrupt number %d — intterval(jiffies) %ld  — jiffies:%ld \n”, irq,mytime, jiffies);
mytime=jiffies;
//printk(“Interrupt on %s —–%d \n”,dev->name,dev->irq);
}

mycount++;
return IRQ_NONE;
}

static int __init myirqtest_init(void)
{
printk (“My module worked!\n”);
//regist irq
//if (request_irq(irq,&myinterrupt,SA_SHIRQ,interface,&irq)) { //early than 2.6.23
if (request_irq(irq,&myinterrupt,IRQF_SHARED,interface,&irq)) { //later than 2.6.23
printk(KERN_ERR “myirqtest: cannot register IRQ %d\n”, irq);
return -EIO;
}
printk(“%s Request on IRQ %d succeeded\n”,interface,irq);

return 0;
}

static void __exit myirqtest_exit(void)
{
printk (“Unloading my module.\n”);
free_irq(irq, &irq); //release irq
printk(“Freeing IRQ %d\n”, irq);

return;
}

module_init(myirqtest_init);
module_exit(myirqtest_exit);

MODULE_AUTHOR(“Helight.Xu”);
MODULE_LICENSE(“GPL”);

编译使用该模块:

使用Makefile文件的内容如下

obj-m := myirq.o

KERNELDIR := /usr/src/kernels/linux-2.6.24/

all:

make -C $(KERNELDIR) M=$(PWD) modules

clean:

rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

在查看 /proc/interrupts文件后,确定要共享的中断号(应为该程序是共享中断号的),使用下面的命令插入模块。

insmod myirq.ko irq=2 interface=myirq

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