当前位置: 代码迷 >> 综合 >> Linux内核学习笔记 -29 动手实践 - 中断下半部的代码分析与应用
  详细解决方案

Linux内核学习笔记 -29 动手实践 - 中断下半部的代码分析与应用

热度:77   发布时间:2024-02-08 16:11:03.0

Linux将中断处理分为上下两部分,上半部分主要处理紧急的,必须马上处理的事情,下半部分处理不那么紧急的事情,linux内核也提供了相应的机制,这里使用理论课中的tasklet机制来进行实验。

本节代码是在上节的基础上稍微增加一部分代码即可。

首先在中断服务例程,即上半部分中添加tasklet的init函数,即将下半部分函数进行注册。最主要的是要将下半部分处理函数挂载上去。最后调用tasklet_schedule函数进行调度

最后用到tasklet_kill,用来注销掉我们的tasklet

book@100ask:~/Mooc/CH06$ cat interrupt2.c
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/interrupt.h>static int irq;
static char * devname;module_param(irq,int,0644);
module_param(devname,charp,0644);struct myirq
{int devid;
};struct myirq mydev={1119};static struct tasklet_struct mytasklet;static void mytasklet_handler(unsigned long data)
{printk("I am mytasklet_handler");
}static irqreturn_t myirq_handler(int irq,void * dev)
{
//      struct myirq mydev;
//      static int count=1;static int count=0;
//      mydev = *(struct myirq*)dev;
//      printk("key: %d..\n",count);
//      printk("