Linux中断机制分析

Linux 的中断 文章目录中断概念和分类Linux 中断处理程序架构Linux 中断编程申请和释放中断使能和屏蔽中断底半部机制1. tasklet2.工作队列3.软中断4. threaded irq 中断概念和分类 中断是指 CPU 在执行程序的过程中,出现了某些突发事件急待处理, CPU 必须暂停当前程序的执行,转去处理突发事件,处理完毕后又返回原程序被中断的位置继续执行。 根据中断的来源,中断可分为内部中断和外部中断,内部中断的中断源来自 CPU 内部(软件中断指令、溢出、除法错误等,例如,操作系统从用户态切换到内核态 阅读详情

目录

 

中断的类型

 
中断一般分为异步中断(一般由硬件引起)和同步中断(一般由处理器本身引起)。
 
异步中断:CPU 处理中断的时间过长,所以先将硬件复位,使硬件可以继续做自己的工作。然后再适当时候处理中断请求中耗时的部分。

举个例子:网卡的工作原理

  1. 网卡收到数据包后,向 CPU 发出中断信号,请求处理接收到的数据包。
  2. CPU 将收到的数据包拷贝到内存后,即通知网卡继续工作。
  3. 至于数据包拷贝至内存后的处理会在适当的时候进行。

这样做避免了处理数据包时间过长导致网卡接收数据包速度变慢。
 
同步中断:CPU 处理完中断请求的所有工作后才反馈硬件

举个例子:系统异常处理(比如运算中的除0操作)

  1. 应用程序出现异常后,需要内核来处理。
  2. 内核调用响应的异常处理函数来处理异常。
  3. 处理完后终了应用程序或者给出 message。

同步中断应该处理很快就能完成的那种中断。

 

中断的上半部和下半部

 
中断处理对处理时间要求很高,如果一个中断要花费较长时间,那么中断处理一般分为两部分。
上半部只做一些必要的工作后,立即通知硬件自己继续则工作。
下半部是中断处理中耗时的部分,CPU 会在适当的时候去完成。当然这个适当的时候一般都很短。
 

中断相关函数

 
首先说明,不同的设备对应的中断不同,每个中断都通过一个唯一的数字标记。这些数字就是中断值,又被称为中断请求(irq)线,有了中断线我们就可以很容易分清谁是谁的中断了。

响应中断时,内核会执行一个函数,中断处理程序 ISR,一个设备的中断处理程序是这个设备驱动的一部分。

实现一个中断,主要需要知道 3 个函数:

  • 注册中断的函数
  • 释放中断的函数
  • 中断处理程序的声明

注册中断的函数

位置:linux/interrupt.h inclue/linux/interrupt.h

定义如下:

    /*
     * irq        - 表示要分配的中断号
     * handler    - 实际的中断处理回调函数
     * flags      - 标志位,表示此中断具有的特性
     * name       - 中断设备的 ASCII 表示,这些会被 /proc/irq 和 /proc/interrupts 文件使用
     * dev        - 用于共享中断线,多个中断程序共享一个中断线时(意思就是共用一个中断号),依靠 dev 来区别各个中断程序
     * 返回值      - 0 if success 
int 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)

如果不是共享中断线,则直接删除 irq 对应的中断线。
如果是共享中断线,则判断此中断处理程序是否是中断线上最后一个中断处理程序,是就同时删除中断线和中断处理程序,不是就只删除中断处理程序。

中断程序的声明

声明格式如下:

/*
 * 中断处理程序的声明
 * @ irq   - 中断处理程序(即request_irq()中handler)关联的中断号
 * &dev    - 与 request_irq() 中的一样,表示一个设备的结构体,用来区别哪个设备引发中断
 * 返回值   - irqrenturn_t 类型,成功返回 IRQ_HANDLED 失败返回 IRQ_NONE
 static irqreturn_t intr_handler(int, irq, void* dev);

中断处理机制

中断处理的过程主要涉及三个函数:

  • do_IRQ 与体系结构有关,多所接收的中断进行应答
  • handle_IRQ_event 调用中断线上所有中断处理
  • ret_from_intr 恢复寄存器,将内核恢复到中断前的状态

处理流程如下:
这里写图片描述

完结。

Balser相机的硬件触发实战:从连线到信号处理 本文详细介绍了Balser相机硬件触发的实战应用,从硬件接线、信号定义到软件配置(Pylon Viewer及API)提供了完整指南。重点阐述了如何利用外部物理电信号实现微秒级精准触发,解决工业场景下的同步与延迟问题,并分享了信号调理、抗干扰等高级实战经验。 阅读详情

相关推荐

ali140滑块

ali 140滑块采用补环境的方式进行逆向,需要的文件主要为这两个,其中collina.js是最主要的环境校验和参数加密的逻辑,这两个文件放本地进行补环境。然后挂上代理,先保证能够正常运行代码,补了些许后能够正常运行了,我们打印最主要的加密函数看看:n值就是得到:挂上代理看看鼠标事件,不管加密逻辑,关心入参即可:收集一些鼠标事件传进记录的函数。其余就是处理一些环境值,一些resetSA的逻辑就行。截图记录:

bboysteed的博客 1678

嵌入式Linux开发26——Linux 中断(万字总结)

文章目录Linux中断简介:1. Linux 中断 API 函数1.1 中断号1.2 request_irq 函数1.3 free_irq 函数1.4 中断处理函数1.5 中断使能与禁止函数2.上半部与下半部2.1 软中断   不管是裸机实验还是 Linux 下的驱动实验,中断都是频繁使用的功能,在裸机中使用中断我们需要做一大堆的工作,比如配置寄存器,使能 IRQ 等等。 Linux 内核提供了完善的中断框架,我们只需要申请中断,然后注册中断处理函数即可,使用非常方便,不需要一系列复杂的寄存器配置。 Li

贾贾的博客 8636

Dify 从入门到熟悉100 天的学习大纲

理解 Dify 的核心概念,熟悉操作界面,并能创建简单的 AI 应用。祝你在这 100 天的旅程中学有所成,成为一名优秀的 AI 应用开发者!掌握生产环境部署、监控、调优,并关注 Dify 生态和前沿动态。探索多模态、Agent、API 集成、性能优化等高级主题。掌握工作流编排、高级提示词技巧、知识库优化等核心功能。

IT深耕十余载,大道之简 1735

Linux中断

Interrupt Request,简称IRQ,中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的 CPU 暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序。软件对硬件进行配置后,软件期望等待硬件的某种状态(比如,收到了数据,GPIO状态变化),这里有两种方式,一种是轮询(polling): CPU 不断的去读硬件状态。

tiandiyixian20的博客 2525

在LinuxMint 22.1(Ubuntu24.04)上安装使用同花顺远航版

Linux用户成功在LinuxMint22.1系统上通过Wine9.0运行同花顺远航版,解决了长期困扰的股票行情软件问题。此前Linux原生版同花顺功能简陋且停止更新,Wine版通达信存在显示问题。作者作为自由软件支持者,通过调整Wine配置文件解决了高分屏显示异常问题,实现了远航版的正常使用。期待同花顺能重启Linux原生版开发,支持更多处理器架构,完善国产软件生态。该方案为Linux股票软件用户提供了实用参考。

5135

FlashAttention 快速安装指南(避免长时间编译)

FlashAttention 编译太慢?本篇提供无需编译的预编译 wheel 快速安装方案,适配多版本 Python、PyTorch 和 CUDA,极大节省部署时间!

Junseer的博客 9721

Linux 中断

根据中断入口跳入方法的不同,中断可分为向量中断和非向量中断。采用向量中断的CPU通常为不同的中断分配不同的中断号,当检测到某个中断号的中断到来后,就自动跳转到与该中断号对应的地址执行,不同中断号的中断有不同的入口地址。非向量中断的多个中断共享一个入口地址,进入到该入口地址后,再通过软件判断中断标志来识别具体是哪个中断

qq_41720028的博客 1220

Docker版OnlyOffice中文字体配置全攻略:从字号调整到字体添加

本文详细介绍了在Docker版OnlyOffice中配置中文字体和调整字号的完整方案。通过容器内操作和配置文件修改,实现中文标准字号映射及思源、阿里巴巴等优质字体的集成,提升文档排版的规范性和专业性。特别针对企业级部署提供了性能优化建议和常见问题解决方案。

weixin_28309571的博客 137

Linux 中断机制深度分析

触发软中断(TASKLET_SOFTIRQ)执行 irqaction->handler。调用action->>handler()触发中断(IRQ 32)irq_desc 查找。查询IDT获取描述符。

X 998

200、从反激到LLC:工程师的成长之路

文章摘要: 本文以工程师视角探讨从反激式到LLC电源设计的思维转变。通过48V通信电源故障案例,揭示LLC谐振电容ESR温度特性引发的隐患,强调LLC需精确计算与测试。对比反激与LLC的核心差异:反激需控制寄生参数(如漏感尖峰、电容ESR),而LLC的关键在于频率响应和死区时间优化。作者提出三大思维转变:从匝比计算转向增益曲线分析,从时域波形观察转向频域频谱诊断,从元件更换转向参数调整。最后给出实战建议,包括建立故障库、关注元件参数细节及示波器调试技巧,指出工程师需从"控制"思维升级为"谐振"思维,实现技术

Jack010169的博客 322

Open3D 模拟退火算法优化的ICP点云配准

传统ICP算法易陷入局部最优且对初始位姿敏感,而SA算法通过概率性接受劣解,能够在高温阶段广泛探索解空间,低温阶段精细收敛。

点云侠的博客 244

linux中断机制简单分析

linux中断机制简单分析 (2012-04-09 11:12) 标签:  中断  分类: linux驱动 驱动程序使用一个中断,一般首先要申请一个中断,申请中断的函数是 int request_irq(unsigned int irq,          irqreturn_t (*handler) (int, void*, struct

chenliujiang1989的专栏 678

手把手教你学simulink(43.2)--光伏发电场景示例:基于Simulink开发一个光伏发电系统仿真模型:采用神经网络控制策略进行优化

需求分析光伏发电系统(Photovoltaic System, PV)是将太阳能转换为电能的重要手段,广泛应用于分布式发电、并网发电和离网供电等领域。随着光伏技术的发展,如何提高光伏发电系统的效率和稳定性成为研究的重点。传统的控制策略(如PID控制器)虽然简单易实现,但在复杂工况下(如光照强度变化、温度波动等)难以达到最优性能。因此,引入先进的控制策略,如神经网络控制(Neural Network Control, NNC),可以显著提升系统的响应速度和鲁棒性。

MHD0815的博客 438

实例分析Linux0.11内核中断机制

       异常就是控制流中的突变,用来响应处理器状态中的某些变化。当处理器检测到有事件发生时,它就会通过一张叫做异常表的跳转表,进行一个间接过程调用,到一个专门设计用来处理这类事件的操作系统子程序,这张表即中断描述符表IDT。本文将针对Linux0.11代码进行分析和调试,来了解中断机制,主要分析以下三个问题:1.  中断描述符表的建立。2.  一般中断的处理过程,以0x3号中断为例。3. 

4365

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

linux0.11下的中断机制分析

异常就是控制流中的突变,用来响应处理器状态中的某些变化。当处理器检测到有事件发生时,它就会通过一张叫做异常表的跳转表,进行一个间接过程调用,到一个专门设计用来处理这类事件的操作系统子程序,这张表即中断描述符表IDT。本文将针对Linux0.11代码进行分析和调试,来了解中断机制,

通往AGI之路 899

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ARM Linux中断机制分析

ARM Linux中断机制分析 ——以用户模式产生irq中断为例 以下代码基于内核linux2.6.38.3(trimslice官网下载) 本文主要分析ARM发生中断时的处理流程,以在usr态发生IRQ为例,即usr—>irq为例讨论。       1.内核异常向量表的初始化 1.1初始化大致流程 ARM linux内核启动时,首先运行的是linux/arch/arm/kerne

cosmoslhf的专栏 1221

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

linux内核分析及应用 -- 中断机制

我们编写的程序在运行的时候,并不会一直占据着 CPU 资源,比如你需要和外部设备做交互(读写磁盘数据、读写网络接口等),那么你就要主动放弃 CPU,当外部设备数据就绪后,就会通过中断机制来通知 CPU 切换回你刚才运行程序的上下文继续往下执行。 另外,即使是 CPU 密集型运算的程序,系统也并不仅仅给一个进程来运行。为了对系统中所有的进程公平起见,一般会通过时钟中断的机制,定期打断当前在 CPU...

~~ LINUX ~~ 1325

linux中断机制分析

在linux设备驱动中,使用中断的设备需要申请和释放对应的中断,分别使用内核提供的request()和free()函数。1 申请IRQint request_irq(unsigned int irq, void (*handler)(int irq, void *dev_id ...),                        unsigned long irqflags, const char *devname, void *dev_id);其中irq:要申请的硬件中断号irqflags是要处理的中

fdaopeng的专栏 4136

arm linux中断分析,ARM Linux中断机制分析

——以用户模式产生irq中断为例以下代码基于内核linux2.6.38.3(trimslice官网下载)本文引用地址:http://www.eepw.com.cn/article/201611/317921.htm本文主要分析ARM发生中断时的处理流程,以在usr态发生IRQ为例,即usr—>irq为例讨论。1.内核异常向量表的初始化1.1初始化大致流程ARM linux内核启动时,首先运行...

weixin_42521186的博客 593

linux 2.6代码分析,linux-2.6.38中断机制分析—中断入口代码分析

linux-2.6.38中断机制分析—中断入口代码分析__vectors_start:ARM( swiSYS_ERROR0 )THUMB( svc#0)THUMB(nop)W(b)vector_und + stubs_offsetW(ldr) pc,.LCvswi +stubs_offsetW(b)vector_pabt + stubs_offsetW(b)vector_dabt + stub...

weixin_39556590的博客 285
上一篇: Linux进程调度内核实现分析
下一篇: 中断下半部的三种机制
FreeeLinux
博客等级 码龄11年 421粉丝 356原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值