当前位置: 移动技术网 > 网络运营>服务器>Linux > Linux内核学习笔记 -29 动手实践 - 中断下半部的代码分析与应用

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

2020年08月10日  | 移动技术网网络运营  | 我要评论
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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网