
Linux内核-中断子系统
文章平均质量分 85
基于S3C2440讲解linux内核中断
生活需要深度
这个作者很懒,什么都没留下…
展开
-
万字长文 | 肝翻ARM Linux中断机制所有知识点
在Linux系统中,中断是一种机制,用于处理外部设备或软件请求的事件。当一个设备需要与CPU进行通信时,它会发送一个中断信号给CPU,以引起注意并触发相应的中断处理程序。中断可以分为硬件中断和软件中断。硬件中断是由外部设备(如键盘、鼠标、网卡等)发出的信号,用于通知CPU有相关事件需要处理。当收到硬件中断信号后,CPU会暂停当前正在执行的任务,并跳转到对应的中断处理程序来响应和处理这个事件。软件中断是由操作系统或应用程序主动触发的,例如系统调用、异常或软件产生的信号等。原创 2024-08-07 09:20:11 · 448 阅读 · 0 评论 -
/proc/interrupts
读取到的内容从左到右,分别为:1、逻辑中断号,2、中断在各CPU发生的次数,3、中断所属设备类名称,4、硬件中断号,5、中断处理函数。原文链接:https://blog.youkuaiyun.com/fybon/article/details/78414794。原创 2023-03-07 17:42:07 · 474 阅读 · 0 评论 -
中断处理 - 操作系统
3、中断处理:中断处理程序是被内核调用来响应中断的,它运行在中断上下文。 补充: 对Linux内核中进程上下文和中断上下文的理解 内核空间和用户空间是操作系统理论的基础之一,即内核功能模块运行在内核空间,而应用程序运行 在用户空间。现代的CPU都具有不同的操作模式,代表不同的级别,不同的级别具有不同的功能,在较低 的级别中将禁止某些操作。Linux系统设计时利用了这种硬件特性,使用了两个级别,最高级别和最低级 别,内核运行在最高...原创 2022-03-20 11:07:42 · 4187 阅读 · 0 评论 -
workqueue 工作队列
Workqueue工作队列是利用内核线程来异步执行工作任务的通用机制;Workqueue工作队列可以用作中断处理的机制,利用进程上下文来执行中断处理中耗时的任务,因此它允许睡眠,而Softirq和Tasklet在处理任务时不能睡眠;在中断处理过程中,或者其他子系统中,调用workqueue的调度或入队接口后,通过建立好的链接关系图逐级找到合适的worker,最终完成工作任务的执行;原创 2022-09-02 16:47:07 · 2448 阅读 · 0 评论 -
softirq和tasklet
中断子系统中有一个重要的设计机制,那就是Top-half和Bottom-half,将紧急的工作放置在Top-half中来处理,而将耗时的工作放置在中来处理,这样确保Top-half能尽快完成处理,那么为什么需要这么设计呢?ARM处理器在进行中断处理时,处理器进行异常模式切换,此时会将中断进行关闭,处理完成后再将中断打开;如果中断不分上下半部处理,那么意味着只有等上一个中断完成处理后才会打开中断,下一个中断才能得到响应。原创 2022-09-02 16:45:51 · 407 阅读 · 0 评论 -
通用处理架构
【原创】Linux中断子系统(一)-中断控制器及驱动分析讲到了底层硬件GIC驱动,以及Arch-Specific的中断代码,本文将研究下通用的中断处理的过程,属于硬件无关层。当然,我还是建议你看一下上篇文章。用户是怎么使用中断的(中断注册)?外设触发中断信号时,最终是怎么调用到中断handler的(中断处理)?从上到下:围绕irq_desc中断描述符建立好连接关系,这个过程就包括:中断源信息的解析(设备树),硬件中断号到Linux中断号的映射关系、irq_desc。原创 2022-09-02 16:48:08 · 156 阅读 · 0 评论 -
中断控制器及驱动分析
从这篇文章开始,来聊一聊中断子系统。中断是处理器用于异步处理外围设备请求的一种机制,可以说中断处理是操作系统管理外围设备的基石,此外系统调度、核间交互等都离不开中断,它的重要性不言而喻。硬件层:最下层为硬件连接层,对应的是具体的外设与SoC的物理连接,中断信号是从外设到中断控制器,由中断控制器统一管理,再路由到处理器上;硬件相关层:这个层包括两部分代码,一部分是架构相关的,比如ARM64处理器处理中断相关,另一部分是中断控制器的驱动代码;原创 2022-09-02 16:43:52 · 803 阅读 · 0 评论 -
有中断下半部tasklet处理的按键驱动
只有在进入了软中断处理过程中之后才会开启硬件中断,如果在软件中断处理过程中有硬件中断嵌套,也不会再次调用软中断,because硬件中断是软件中断处理过程中再次进入的,此时preempt_count已经记录了软件中断!对于其它架构的CPU,有可能在触发调用软件中断前,也就是还在处理硬件中断的时候,就已经开启了硬件中断,可能会发生中断嵌套,在中断嵌套中是不允许调用软件中断处理的。我的理解是,在发生中断嵌套的时候,表明这个时候是系统突发繁忙的时候,内核第一要务就是赶紧把中断中的事情处理完成,退出中断嵌套。...原创 2022-08-12 10:55:34 · 215 阅读 · 0 评论 -
workqueue 中断后半段处理
在 CMWQ 中,通过引入 worker pool,实现了对 workqueue 机制中 生产者(workqueue) 和 消费者(worker) 的解耦。worker 的生命周期不再受 workqueue 的控制,而是由相应的 worker pool 来管理。而 workqueue 在创建时会和特定的 workpool 建立关联 (pool_workqueue),work 在添加时会顺着该关联由相应 worker pool 管理的 worker 来做。......原创 2022-08-09 17:22:08 · 1444 阅读 · 0 评论 -
Linux虚拟化KVM-Qemu分析(六)之中断虚拟化
本文会将ARMGICv2中断虚拟化的总体框架和流程讲清楚,这个曾经困扰我好几天的问题在被捋清的那一刻,让我有点每有会意,欣然忘食的感觉。在讲述中断虚拟化之前,我们应该对中断的作用与处理流程有个大致的了解中断是处理器用于异步处理外围设备请求的一种机制;外设通过硬件管脚连接在中断控制器上,并通过电信号向中断控制器发送请求;中断控制器将外设的中断请求路由到CPU上;ARM-GICv2来描述,因此也不会涉及到MSI以及ITS等特性,带着问题出发吧。...原创 2022-07-18 17:31:43 · 1027 阅读 · 0 评论 -
Linux中断子系统(四)-Workqueue
Workqueue工作队列是利用内核线程来异步执行工作任务的通用机制;Workqueue工作队列可以用作中断处理的机制,利用进程上下文来执行中断处理中耗时的任务,因此它允许睡眠,而Softirq和Tasklet在处理任务时不能睡眠;来一张概述图在中断处理过程中,或者其他子系统中,调用workqueue的调度或入队接口后,通过建立好的链接关系图逐级找到合适的worker,最终完成工作任务的执行;...原创 2022-07-18 17:30:02 · 1273 阅读 · 0 评论 -
Linux中断子系统(三)-softirq和tasklet
中断子系统中有一个重要的设计机制,那就是Top-half和Bottom-half,将紧急的工作放置在Top-half中来处理,而将耗时的工作放置在中来处理,这样确保Top-half能尽快完成处理,那么为什么需要这么设计呢?看一张图就明白了ARM处理器在进行中断处理时,处理器进行异常模式切换,此时会将中断进行关闭,处理完成后再将中断打开;如果中断不分上下半部处理,那么意味着只有等上一个中断完成处理后才会打开中断,下一个中断才能得到响应。机制,包括了softirq、tasklet、workqueue。.....原创 2022-07-18 17:28:07 · 654 阅读 · 0 评论 -
Linux中断子系统(二)-通用框架处理
Linux中断子系统(一)-中断控制器及驱动分析》讲到了底层硬件GIC驱动,以及Arch-Specific的中断代码,本文将研究下通用的中断处理的过程,属于硬件无关层。当然,我还是建议你看一下上篇文章。这篇文章会解答两个问题用户是怎么使用中断的(中断注册)?外设触发中断信号时,最终是怎么调用到中断handler的(中断处理)?中断的处理,总体来说可以分为两部分来看从上到下围绕irq_desc中断描述符建立好连接关系,这个过程就包括irq_descirq_deschttpshttps。...原创 2022-07-18 17:25:29 · 719 阅读 · 0 评论 -
Linux中断子系统(一)-中断控制器及驱动分析
从这篇文章开始,来聊一聊中断子系统。中断是处理器用于异步处理外围设备请求的一种机制,可以说中断处理是操作系统管理外围设备的基石,此外系统调度、核间交互等都离不开中断,它的重要性不言而喻。来一张概要的分层图硬件层最下层为硬件连接层,对应的是具体的外设与SoC的物理连接,中断信号是从外设到中断控制器,由中断控制器统一管理,再路由到处理器上;硬件相关层这个层包括两部分代码,一部分是架构相关的,比如ARM64处理器处理中断相关,另一部分是中断控制器的驱动代码;通用层。...原创 2022-07-18 17:23:57 · 1165 阅读 · 0 评论 -
Linux kernel的中断子系统之(二):IRQ Domain介绍
很遗憾,在GIC的代码中没有调用标准的注册irqdomain的接口函数。(3)nomap。驱动调用该函数的时候必须提供HWinterruptID,也就是意味着driver知道自己使用的HWinterruptID,而一般情况下,HWinterruptID其实对具体的driver应该是不可见的,不过有些场景比较特殊,例如GPIO类型的中断,它的HWinterruptID和GPIO有着特定的关系,driver知道自己使用那个GPIO,也就是知道使用哪一个HWinterruptID了。...原创 2022-07-17 18:43:39 · 1034 阅读 · 0 评论 -
Linux kernel的中断子系统之(一):综述
对于CPU1而言,在执行该中断的handler的时候,将Interruptprocessortargetregister中CPU0的bit为设置为1,disable本CPU的比特位,这样在下次中断发生的时候,interuptcontroller就把中断送给了CPU0。如果送达了多个cpu,实际上,也应该只有一个handler实际和外设进行交互,另外一个cpu上的handler的动作应该是这样的发现该irqnumber对应的中断已经被另外一个cpu处理了,直接退出handler,返回中断现场。...原创 2022-07-17 18:42:24 · 552 阅读 · 0 评论 -
Linux中断与实例
软中断使用softirq_action结构体。因此要想使用软中断,就要注册对应的软中断函数,使用voidopen_softirq函数去注册。在裸机中断中我们需要做很多工作,比如关闭MMU,Cache等配置寄存器,使能中断。但是linux内核提供了完善的中断框架,我们只需要申请中断request_irq,然后注册中断处理函数即可。一般我们所说的中断都是上半部的,中断要求快速执行。举个例子gpio1中描述中断的信息是interrupts,它是SPI的中断,中断号为66,67,高电平触发中断类型。......原创 2022-07-17 18:09:18 · 933 阅读 · 0 评论 -
Linux中断管理概述
由于中断学习设计到硬件和中断网络芯片的硬件知识,这一块内容首先要求必须针对某一块芯片的某一种硬件中断网络展开学习。需要掌握的知识包含硬件中断网络运作机理、硬件中断优先级和中断嵌套、linux中断网络处理流程、linux中断的管理方式、linux中断下半文处理流程。中断网络是芯片与外界通信的一个非常重要的通道,在所有芯片中都会较好的设计芯片的中断网络,为了更好的适配复杂的硬件中断网络,linux操作系统也开辟了独特的中断子模块完成常见芯片的中断体系管理。原创 2022-11-29 10:39:13 · 277 阅读 · 0 评论