首页 > 系统相关 >linux中断子系统(四) - 内核提供的相关接口和结构体

linux中断子系统(四) - 内核提供的相关接口和结构体

时间:2022-10-31 17:39:37浏览次数:43  
标签:中断 irq void unsigned int handler 内核 linux 子系统


内核的代码位于kernel/irq目录下

内核提供的相关接口

与注册系统中断处理函数相关接口

int set_irq_chip(unsigned int irq, struct irq_chip *chip)

void __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained, const char *name)

与注册用户中断处理函数相关接口

static inline int __must_check
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev)
int request_threaded_irq(unsigned int irq, irq_handler_t handler, irq_handler_t thread_fn,
unsigned long irqflags, const char *devname, void *dev_id)

void free_irq(unsigned int irq, void *dev_id)

打开和关闭本地cpu中断

local_irq_enable()  
local_irq_disable()
local_irq_save(flags)
local_irq_restore(flags)

打开和关闭某个中断

void enable_irq(unsigned int irq)
void disable_irq(unsigned int irq)

结构体

struct irq_desc

每个中断号或者一组中断号(如级联的中断)对应一个struct irq_desc, 所以根据相应的中断号,可以获取对应的中断描述结构irq_desc


struct irq_chip

irq_chip结构定义了各种中断相关的处理行为,如开启或禁止中断以及中断服务完成的之后对相关的中断寄存器进行处理(清中断等)
struct irq_chip这个结构体很重要,里面的ack,enable,disable,mask,unmask,都与具体的中断控制器相关
kernel/irq中的enable_irq,disable_irq都是调用的chip->中的这些函数。


struct irqaction

是一个单链表,所以一个中断号能对应执行多个用户中断处理函数,比如说usb中断来了,他会依次执行以usb中断号注册的EHCI和ohci的用户中断处理函数


/proc文件系统接口

/proc/interrupts

读取interrupts会依次显示irq编号,每个cpu对该irq的处理次数,中断控制器的名字,irq的名字,以及驱动程序注册该irq时使用的名字。


/proc/irq


/proc/irq/n/smp_affinity

分配某个中断给某个cpu
echo 3 > /proc/irq/n/smp_affinity //将中断号n分配给cpu1和cpu2

另外用户进程irqbalance服务可以实现中断均衡处理


标签:中断,irq,void,unsigned,int,handler,内核,linux,子系统
From: https://blog.51cto.com/u_15854579/5810519

相关文章

  • linux中断子系统(二) - 注册用户中断处理函数
    区别系统中断函数和用户中断函数和前面一篇文章区别开来,之所以要区别系统中断函数和用户中断函数,这是我自己的理解。来看一个结构体:structirq_desc{unsignedint......
  • 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......
  • 驱动开发:内核层InlineHook挂钩函数
    在上一章《驱动开发:内核LDE64引擎计算汇编长度》中,LyShark教大家如何通过LDE64引擎实现计算反汇编指令长度,本章将在此基础之上实现内联函数挂钩,内核中的InlineHook函数挂钩......
  • linux漏洞修复——tomcat
    检测到的漏洞修复方式一般分为两种:修改配置文件、升级组件规避漏洞,一般紧急规避是选择前一种方式。1.tomcat隐藏版本信息a.cd /usr/tomcat9/lib/cp catalina.jar......
  • 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......