欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

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

程序员文章站 2022-06-22 08:06:56
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

相关标签: Linux内核