首页 > 系统相关 >linux中断子系统(二) - 注册用户中断处理函数

linux中断子系统(二) - 注册用户中断处理函数

时间:2022-10-31 17:39:19浏览次数:37  
标签:中断 irq handler linux action 处理函数 desc



区别系统中断函数和用户中断函数

和前面一篇文章区别开来,之所以要区别系统中断函数和用户中断函数,这是我自己的理解。
来看一个结构体:

struct irq_desc {
unsigned int irq;
struct irq_chip *chip;
irq_flow_handler_t handle_irq;
struct irqaction *action;/* IRQ action list */
...
} ____cacheline_internodealigned_in_smp;

前面通过set_irq_chip和set_irq_handler是设置了struct irq_desc结构体中的chip和handler_irq,中断产生后,handler_irq对应的系统中断处理函数会首先被调用,这个系统中断处理函数又会去调用irq_desc->action即用户中断处理函数,并且会遍历irq_desc下所有的action,所以要把系统中断处理函数handler_irq与用户中断处理函数action区别开来。以handler_irq为handle_level_irq的例子,如下:

void handle_level_irq(unsigned int irq, struct irq_desc *desc)
{
...
action = desc->action;
action_ret = handle_IRQ_event(irq, action);
...
}

irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action)
{
...
do {
ret = action->handler(irq, action->dev_id);
switch (ret) {
case IRQ_WAKE_THREAD:
...
case IRQ_HANDLED:
...
default:
break;
}

retval |= ret;
action = action->next;
} while (action);

return retval;
}

注册用户中断处理函数

一般都使用
static inline int __must_check request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev)

void free_irq(unsigned int irq, void *dev_id)


标签:中断,irq,handler,linux,action,处理函数,desc
From: https://blog.51cto.com/u_15854579/5810520

相关文章

  • linux中断子系统(一) - 注册系统中断处理函数
    重要的宏内核中使用宏MACHINE_START、MACHINE_END来定义一个machine_desc结构,machine_desc中定义了:机器类型,起始I/O物理地址,bootloader传入的参数地址,中断初始化函数,I/O映射......
  • linux字符设备内核源码
    文件位于fs/chr_dev.c重要的结构体structcdev{structkobjectkobj;structmodule*owner;conststructfile_operations*ops;structlist_headlist;......
  • linux内核资料
    Documentation搜集一下看到过的Documentation1、关于gnumakefile的使用说明Documentation/Kbuild/makefiles.txt2、介绍kernel各个参数及其意义Documentation/kernel......
  • PetaLinux 工程中隐藏的Linux特性
    KR260的PetaLinuxBSP工程里,默认使能了Linux内核的OF_OVERLAY等特性。使用PetaLinux配置Linux内核,禁止OF_OVERLAY等特性。在生成的配置文件user_2022-10-31-06-59-00.cfg......
  • linux漏洞修复——tomcat
    检测到的漏洞修复方式一般分为两种:修改配置文件、升级组件规避漏洞,一般紧急规避是选择前一种方式。1.tomcat隐藏版本信息a.cd /usr/tomcat9/lib/cp catalina.jar......
  • javascript日期处理函数的一些问题
    问题1:newDate(字符串)产生的日期对象,在某些情形下,可能会自动增加1天。猜测是和时区有关,浏览器没有默认当前时区?这是一个坑。问题2:setDate()设置日期后不准确的问题。比如......
  • linux文档编辑的命令都有哪些?linux命令详解
    在Linux系统中,所有的操作都是需要执行命令才能完成的,可以说,命令的掌握程度对于Linux运维工程师来说至关重要,本篇文章将为大家介绍几个Linux文档编辑命令,以下是详细的内容:1......
  • Linux下漏洞整改方案
    一.nginx版本漏洞Nginx默认是显示版本号curl-Ihttp://192.168.252.135:8000/----后面为nginx站点地址这样暴露出来的版本号就容易变成攻击者可利用的信息。所以,从安......
  • linux控制cpu占用率
    之前在<编程之美>上提到说控制cpu的使用率使能在任务管理器上画一条正弦线现在下面提供一个在Linux平台上实现的控制cpu频率在某个值​cpu_load.c​​#include<iostream......
  • linux cpu使用率
    限制某个进程的cpu使用率cd/sys/fs/cgroup/cpumkdircg1//在cpu目录下创建一个cpu控制族群,这时会在这个目录下自动生成几个文件,其中,限制cpu使用率主要和两个文件有关:......