Linux内核学习笔记 -29 动手实践 - 中断下半部的代码分析与应用
程序员文章站
2022-03-27 10:31:14
Linux将中断处理分为上下两部分,上半部分主要处理紧急的,必须马上处理的事情,下半部分处理不那么紧急的事情,linux内核也提供了相应的机制,这里使用理论课中的tasklet机制来进行实验。本节代码是在上节的基础上稍微增加一部分代码即可。首先在中断服务例程,即上半部分中添加tasklet的init函数,即将下半部分函数进行注册。最主要的是要将下半部分处理函数挂载上去。最后调用tasklet_schedule函数进行调度最后用到tasklet_kill,用来注销掉我们的taskletboo...
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("
本文地址:https://blog.csdn.net/f2157120/article/details/107884985