七度黑光--当感到一切都毫无头绪的时候,最好静下心来从基础开始.

tasklet实验(加中断后的)

上一篇 / 下一篇  2008-05-07 16:14:27 / 个人分类:linux学习笔记

查看( 608 ) / 评论( 0 )
#include <linux/module.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/sched.h>

static int mycount = 0;
static long mytime = 0;

static int irq;
static char *interface;

module_param(interface,charp,0644);
module_param(irq,int,0644);
         static struct tasklet_struct mytasklet;
       static void mylet(unsigned long data)
{               printk("mylet begin\n");

   if(mycount==0)
   mytime=jiffies;
      if (mycount < 10)
   {
       mytime=jiffies-mytime;
       printk("Interrupt number %d --time %ld \n",irq,mytime);
       mytime=jiffies;
   }
   mycount++;

   return;
}

static irqreturn_t myinterrupt(int intno,void *dev_id)
{
   tasklet_schedule(&mytasklet);
   return IRQ_NONE;
}

static int __init myirqtest_init(void)
{
   static unsigned data=0;
   printk ("My module worked!\n");

   tasklet_init(&mytasklet, mylet, data);


   //if (request_irq(irq,&myinterrupt,SA_SHIRQ,interface,&irq))   //for 2.6.22
   if (request_irq(irq,&myinterrupt,IRQF_SHARED,interface,&irq)) //for 2.2.24
   {
       printk(KERN_ERR "myirqtest: cannot register IRQ %d\n", irq);
       free_irq(irq,&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");

   tasklet_kill(&mytasklet);
   free_irq(irq,&irq);
   printk("Freeing IRQ %d\n", irq);

   return;
}

module_init(myirqtest_init);
module_exit(myirqtest_exit);

MODULE_LICENSE("GPL");

TAG:

我来说两句

(可选)

日历

« 2008-10-12  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 7662
  • 日志数: 50
  • 图片数: 1
  • 文件数: 1
  • 书签数: 3
  • 建立时间: 2008-03-08
  • 更新时间: 2008-09-27

RSS订阅

Open Toolbar