Linux中断子系统
ch3rry
每天早上醒来,看见你和阳光都在,这就是我想要的未来。
展开
-
Linux中断管理
CPU和外设之间的交互,或CPU通过轮询机制查询,或外设通过中断机制主动上报。对大部分外设中断比轮询效率高,但比如网卡驱动采取轮询比中断效率高。这里重点关注ARM+Linux组合下中断管理,从底层硬件GIC+CPU,到Linux内核通用部分处理,再到GIC驱动以及中断注册,最后是中断下半部软终端、tasklet、workqueue,包括线程化部分。所以按照从硬件到软件,软件从底层到上层...原创 2019-06-25 12:16:05 · 156 阅读 · 0 评论 -
Linux中断管理 (1)Linux中断管理机制
关键词:GIC、IAR、EOI、SGI/PPI/SPI、中断映射、中断异常向量、中断上下文、内核中断线程、中断注册。由于篇幅较大,简单梳理一下内容。本章主要可以分为三大部分:讲解硬件背景的1.ARM中断控制器。系统初始化的静态过程:GIC初始化和各中断的中断号映射2. 硬件中断号和Linux中断号的映射;每个中断的注册5. 注册中断。一个中断从产生到执行完毕的动态过程:...转载 2019-06-25 12:20:59 · 729 阅读 · 0 评论 -
Linux中断管理 (2)软中断和tasklet
关键词:TASKLET_SOFTIRQ、HI_SOFTIRQ、softirq_action、ksoftirqd、tasklet、BH。软中断以及基于软中断的tasklet、工作队列,包括中断线程化都属于下半部机制,为什么需要下半部机制呢?1.硬件中断处理程序以异步方式执行,会打断其它重要代码执行,因此为了避免打断事件太久,硬件中断程序需要尽快执行完成。2.硬件中断处理程序通常在关...转载 2019-06-25 12:25:18 · 361 阅读 · 0 评论 -
Linux中断管理 (3)workqueue工作队列
关键词:工作队列的原理是把work(需要推迟执行的函数)交由一个内核线程来执行,它总是在进程上下文中执行。工作队列的优点是利用进程上下文来执行中断下半部操作,因此工作队列允许重新调度和睡眠,是异步执行的进程上下文,它还能解决软中断和tasklet执行时间过长导致系统实时性下降等问题。当驱动程序或者内核子系统在进程上下文中有异步执行的工作任务时,可以使用work item来描述工作...转载 2019-06-25 12:33:39 · 1679 阅读 · 0 评论 -
Linux中断(interrupt)子系统之一:中断系统基本原理
这个中断系列文章主要针对移动设备中的Linux进行讨论,文中的例子基本都是基于ARM这一体系架构,其他架构的原理其实也差不多,区别只是其中的硬件抽象层。内核版本基于3.3。虽然内核的版本不断地提升,不过自从上一次变更到当前的通用中断子系统后,大的框架性的东西并没有太大的改变。1. 设备、中断控制器和CPU一个完整的设备中,与中断相关的硬件可以划分为3类,它们分别是:设备、中断控制器和...转载 2019-07-02 19:35:43 · 241 阅读 · 0 评论 -
Linux中断(interrupt)子系统之二:arch相关的硬件封装层
Linux的通用中断子系统的一个设计原则就是把底层的硬件实现尽可能地隐藏起来,使得驱动程序的开发人员不用关注底层的实现,要实现这个目标,内核的开发者们必须把硬件相关的内容剥离出来,然后定义一些列标准的接口供上层访问,上层的开发人员只要知道这些接口即可完成对中断的进一步处理和控制。对底层的封装主要包括两部分:实现不同体系结构中断入口,这部分代码通常用asm实现;中断控制器进行封装和实现;本文...转载 2019-07-02 19:36:49 · 255 阅读 · 0 评论 -
Linux中断(interrupt)子系统之三:中断流控处理层
1. 中断流控层简介早期的内核版本中,几乎所有的中断都是由__do_IRQ函数进行处理,但是,因为各种中断请求的电气特性会有所不同,又或者中断控制器的特性也不同,这会导致以下这些处理也会有所不同:何时对中断控制器发出ack回应;mask_irq和unmask_irq的处理;中断控制器是否需要eoi回应?何时打开cpu的本地irq中断?以便允许irq的嵌套;中断数据结构的同步和保护;...原创 2019-07-02 22:41:47 · 363 阅读 · 0 评论 -
Linux中断(interrupt)子系统之四:驱动程序接口层 & 中断通用逻辑层
在本系列文章的第一篇:Linux中断(interrupt)子系统之一:中断系统基本原理,我把通用中断子系统分为了4个层次,其中的驱动程序接口层和中断通用逻辑层的界限实际上不是很明确,因为中断通用逻辑层的很多接口,既可以被驱动程序使用,也可以被硬件封装层使用,所以我把这两部分的内容放在一起进行讨论。本章我将会讨论这两层对外提供的标准接口和内部实现机制,几乎所有的接口都是围绕着irq_desc和i...转载 2019-07-02 22:42:44 · 273 阅读 · 0 评论 -
Linux中断(interrupt)子系统之五:软件中断(softIRQ)
软件中断(softIRQ)是内核提供的一种延迟执行机制,它完全由软件触发,虽然说是延迟机制,实际上,在大多数情况下,它与普通进程相比,能得到更快的响应时间。软中断也是其他一些内核机制的基础,比如tasklet,高分辨率timer等。1. 软件中断的数据结构1.1 struct softirq_action内核用softirq_action结构管理软件中断的注册...转载 2019-07-02 22:43:48 · 249 阅读 · 0 评论