LKD:中断_neil中断-程序员宅基地

技术标签: 《Linux Kernel Development》  LKD  

  1. 中断请求(IRQ)线:不同设备对应的中断不同,而每个中断都通过一个唯一的数字标志。重点在于特定的中断总是与特定的设备相关联,并且内核要知道这些信息。
  2. 异常:常常也称为同步中断。如处理器执行到由于编程失误导致的错误指令(如被0除),或者执行期间出现特殊情况(如缺页),处理器就会产生一个异常。
  3. 中断处理程序(ISR):上半部——接收到一个中断,它就立即开始执行,但只做有严格时限的工作,例如对接收的中断进行应答或者复位硬件,这些工作都是在所有中断被禁止的情况下完成的。
  4. 注册中断处理程序

int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev)

irq:表示要分配的中断号,对大多数设备,这个值可以通过探测获取,或者通过编程动态确定;

handler:指针指向处理这个中断的实际中断处理程序。

typedef irqreturn_t (*irq_handler_t)(int, void *);

flag:可能是下列一个或者多个标志的位掩码

IRQF_DISABLED 该标志被设置后,意味着内核在处理中断处理程序本身期间,要禁止所有其他的中断。

IRQF_SAMPLE_RAMDOM 此标志标明这个设备产生的中断对内核熵池有贡献。

IRQF_TIMER 该标志是特别为系统定时器的中断处理而准备的。

IRQF_SHARED 此标志标明可以在多个中断处理程序之间共享中断线

name:与中断相关的设备的ASCII文本表示。/proc/irq和/proc/interrupts文件使用,以便与用户通信。

dev:用于共享中断线。内核每次调用中断处理程序时,都会把这个指针传递给它。实践中往往会通过它传递驱动程序的设备结构。

注意:request_irq()函数可能会睡眠,因此不能在中断上下文或其他不允许阻塞的代码中调用。

 

  1. 释放中断处理程序

void free_irq(unsigned in irq, void *dev)

 

  1. 编写中断处理程序

static irqreturn_t intr_handler(int irq, void *dev)

注意:第二个参数dev是一个通用指针,它与request_irq()的参数dev必须一致。dev可能指向中断处理程序使用的一个数据结构。

重入:linux的中断处理程序是无须重入的。当一个给定的中断处理程序正在执行时,相应的中断线在所有处理器上都会被屏蔽。

共享的中断处理程序:

<a>flag必须设置IRQF_SHARED

<b>dev参数必须唯一,通常会用设备结构;

<c>中断处理程序必须能够判断它的设备是否真的产生了中断:需要硬件的支持和处理程序中的处理逻辑。内核接收到一个中断后,它将依次调用在该中断线上注册的每一个处理程序。

 

  1. 中断上下文

当执行一个中断处理程序时,内核处于中断上下文。

进程上下文:内核所处的一种操作模式,此时内核代表进程执行,例如执行系统调用或者运行内核线程。

中断处理程序打断了其他代码(甚至可能是打断了其他中断线上的另一中断处理程序)

内核栈、中断栈:页

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cjianeng/article/details/100051644

智能推荐

【Oracle云】使用 boto3 访问 OCI 对象存储 (AWS S3协议兼容)_使用s3 browser访问oci object storage-程序员宅基地

文章浏览阅读1.5k次,点赞25次,收藏18次。在现代云计算环境中,S3(Simple Storage Service)协议已经成为云对象存储的事实标准。它提供了简单、可扩展、高度耐用的存储解决方案,得到了广泛应用。Oracle Cloud Infrastructure(OCI)秉承着开放性和灵活性的理念,为用户提供了兼容AWS S3协议的对象存储服务。本文将介绍如何使用 boto3,AWS SDK for Python,通过S3协议访问OCI对象存储。能够在多云环境中实现高度的可移植性,利用协议的兼容性轻松构建跨云的存储方案。_使用s3 browser访问oci object storage

软件测试工程师必备的SQL语句基础_软件测试工程师对数据库使用的常见命令-程序员宅基地

文章浏览阅读875次,点赞26次,收藏9次。为一个,我们在测试过程中往往需要对数据库数据进行操作,但是我们的操作大多以查询居多,有时会涉及到新增,修改,删除等操作,所以我们其实并不需要对数据库的操作有特别深入的了解,以下是我在工作过程中整理的比较常用的。_软件测试工程师对数据库使用的常见命令

使用flask db migrate 抛出异常 raise KeyError(key),KeyError: ‘formatters‘_fastapi sls keyerror: 'formatters-程序员宅基地

文章浏览阅读188次。在重新 使用flask db init 初始化 生成migrations文件夹 在使用 flask db migrate 一切就ok!所以索性直接删除 项目下migrations文件夹和删除数据库 alembic_version表。首先 我在网上看到很多 是找不到日志等原因 修改日志的读取路径 但是我没有找到所要修改的代码。_fastapi sls keyerror: 'formatters

DDR3芯片读写控制及调试总结 — Xilinx FPGA(MIS)_xilinx ddr3 原理图设计-程序员宅基地

文章浏览阅读9.6k次,点赞6次,收藏90次。目录 DDR3芯片读写控制及调试总结1. 器件选型及原理图设计 (1) 由于是直接购买现成的开发板作为项目前期开发调试使用,故DDR3芯片已板载,其型号为MT41J256M16HA-125,美光公司生产的4Gb容量DDR3芯片。采..._xilinx ddr3 原理图设计

golang 函数 传入返回 slice/map/struct 本质_golang 返还一个新struc-程序员宅基地

文章浏览阅读3.4k次。Go语言中所有的传参都是值传递(传值),都是一个副本,一个拷贝。且传参和赋值(=)的操作本质是一样的。拷贝的内容分为 非引用类型 和 引用类型 两种类型非引用类型:int、string、struct、array这样就不能修改原内容数据。引用类型:指针、map、slice、chan,这样就可以修改原内容数据。实例:slicepackage mainimport ..._golang 返还一个新struc

9 张图带你搞懂 Istio-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏18次。公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !什么是 Istio?Istio 是一个服务网格,它允许在集群中的 pods 和服务之间进行更详细、复杂和..._大白话图解istio

随便推点

oracle vreate schame,create schema 语句-程序员宅基地

文章浏览阅读339次。create schema 语句初见create schema 这条语句,还以为oracle 中的schema 是使用该条语句创建呢。其实oracle 中create user 才是创建schema 的语句,user 和 schema 是不可分的。create schema 只不过是提供了一种填充schema 的方式,可以将条DDL语句和DCL语句打包在一起。省去了一条一条执行这些命令的繁琐,被c..._创建带有schema的oracle语句

东莞网上在线教育系统,线上网课怎么上?如何学习?-程序员宅基地

文章浏览阅读341次,点赞6次,收藏9次。既然是上网课那么自身也就没有过多的限制,不需要像在教室认认真真的老实坐着,不论你身处何处,只要有网就可以学,可以利用更多的散碎时间,见缝插针地学,可以轻松学到更多的知识。首先面授和网上教学,学生对待上课的态度是不一样的,网课对学生的自律要求比较高,直播课没有听懂那么还能看录播反复的学,这对一些学习能力比较弱的学生来说非常方便。自制力强的,上网课肯定是有效果的,网课和线下课程是差不多的,网课种类更多,只要可以沉下心学习,东西都是可以学到的。获取知识付费、在线教育系统源码【tuzhi.ltd】。

Mysql时区问题及解决方法-程序员宅基地

文章浏览阅读3.7k次。在使用MySQL时,如果你的系统时区与MySQL服务器时区不一致,那么你在插入或查询时间时可能会得到不正确的结果。例如,如果你在系统时区为UTC+8的情况下,插入一个时间为2023-06-07 12:00:00的记录,但MySQL服务器时区为UTC+0,则实际上插入的时间为2023-06-07 04:00:00。例如,在系统时区为UTC+8的情况下,NOW()函数的结果为2023-06-07 12:00:00,在系统时区为UTC+0的情况下,NOW()函数的结果为2023-06-07 04:00:00。

textarea自适应高度二——(设置隐藏div获取高度和仿element-ui组件)_textarea自动高度-程序员宅基地

文章浏览阅读3.9k次,点赞2次,收藏3次。textarea自适应高度二——(设置隐藏div获取高度和仿element-ui组件)_textarea自动高度

蓝牙模块避雷点-程序员宅基地

文章浏览阅读159次。发指令的时候一定要注意!!!必须要勾上回车发送(别傻傻的尝试电脑的回车...

多策略协同改进的阿基米德优化算法及其应用(Matlab代码实现)_阿基米德优化算法python-程序员宅基地

文章浏览阅读185次。本文提出一种混沌阿基米德优化算法(CAOA)。采用混沌理论来提高基本算法的性能。所提出的方法使用混沌映射来更新具有最小成本函数的特定优化问题的候选解。阿基米德优化算法(AOA)是2020年Hashim等人提出的新型元启发式算法,该算法通过模仿完全或部分浸没在流体中的物体发生碰撞时所受浮力的关系,在迭代过程中不断调整个体密度、体积和加速度,从而使个体达到平衡状态,适应度值优的个体引导种群收敛到最优位置,达到寻优的目的。与传统的优化算法相比,元启发式算法具有控制参数少、易于实现、随机性大和适应性强等特点。_阿基米德优化算法python