news 2026/5/6 18:13:19

ARMv7 linux中断路由以及处理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ARMv7 linux中断路由以及处理

在armv7架构,smp系统(多核)下,外设中断signal到cpu的过程如下图:

外设中断信号(hardware interrupts)发送给soc的GIC 中断控制器(generic interrupt controller)。

GIC中断控制器对外设中断信号进行优先级裁决,选出最高优先级的中断,根据GIC中的配置信息,找到中断对应的core id, 然后通过cpu interface向该处理器core发出中断请求(中断core路由)。

对于NUMA架构,由硬件设计决定中断信号是发向那个CPU socket。选中CPU socket后,至于向该CPU哪个core发送中断信号,和上面描述一样,由GIC来配置。

GIC可以配置中断的优先级,以及处理该中断的core id。

我们接着往下。

当core收到中断信号后,core会自动作一些事情:

core进入了异常模式(IRQ),从异常向量表中(0xffff0000),选择IRQ的处理句柄vector_irq来处理。

vector_irq定义如下:

vector_irq主要关注在1016行将中断前的cpsr(中断发生时被硬件拷贝至spsr)保存到堆栈,这个spsr.I肯定是0,即允许中断. 然后根据中断之前的Mode选择对应的处理句柄。

如果中断之前是用户模式,则进入__irq_usr。

如果中断之前是svc模式,则进入__irq_svc。

先看__irq_usr.

__irq_usr -> irq_handler -> handle_arch_irq ->gic_handle_irq() -> handle_domain_irq()->

__handle_domain_irq()->generic_handle_irq()->generic_handle_irq_desc()

这里这个desc->handle_irq,由irq-gic.c注册。

desc->handle_irq就是handle_percpu_devid_irq().

这个desc->handle_irq()最终就是调用驱动程序通过request_irq()注册的处理句柄。

回到__handle_domain_irq()

__handle_domain_irq()在调用generic_handle_irq()后,进入irq_exit(), 这里进行sofirq处理,也就是中断的下半部。

最后,回到__irq_usr.

Irq_handler处理好后,跳转到ret_to_user_from_irq返回中断前的上下文。

ret_to_user_from_irq -> restore_user_regs

可见, __irq_usr是在中断的上半部和下半部处理完成后,才打开IRQ的,即不允许中断嵌套,也不允许高优先级打断还为处理好的低优先级处理程序。

再看__irq_svc(中断前是svc模式)。

__irq_svc先调用svc_entry,将在vector_irq保存的中断前的cpsr信息保存到当前使用的sp堆栈中。

__irq_svc之后也是调用irq_handler处理中断,这个和__irq_usr调用irq_handler是一样的,不重复了。

最后,__irq_svc调用svc_exit,退出中断处理。

第一个参数r5为中断之前的cpsr数据。

svc_exit将中断前的cpsr保存到栈顶,最后通过rfeia指令,将栈顶的数据恢复,即恢复中断前的cpsr数据,也就是enable IRQ.

可见,在armv7架构下,外设中断发生后,cpu自动设置cpsr.I, 屏蔽中断请求,然后处理中断请求,调用中断上半部句柄和中断下半部句柄处理,最后,返回中断前的上下文,cpsr.I恢复到中断前的cpsr.I, 即enable IRQ.

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 10:37:46

专业做合肥广告门头招牌的厂家

专业做合肥广告门头招牌的厂家在合肥,商业竞争日益激烈,一个独特且高质量的广告门头招牌对于企业来说至关重要。它不仅是企业的门面,更是吸引顾客、提升品牌形象的重要工具。而贰师兄广告,就是合肥地区专注于门头招牌发光字设计、…

作者头像 李华
网站建设 2026/5/5 11:53:00

【dz-945】基于单片机的矿下气体安全检测系统的设计与实现

基于单片机的矿下气体安全检测系统的设计与实现 摘要 在矿下作业环境中,温度异常及甲烷、CO₂等气体浓度超标是引发安全事故的重要隐患,可能导致爆炸、中毒等严重后果,威胁矿工生命安全和矿山生产安全。因此,研发一种能实时、准确…

作者头像 李华
网站建设 2026/4/19 8:55:07

soular全面介绍(8) - 集成企业微信,使用企业微信扫码登录soular

集成企业微信用户功能划入社区版本,本篇文章将全面介绍如何在soular中集成企业微信用户并实现企业微信用户登录soular。1、配置企业微信进入系统设置->用户->用户目录,点击企业微信后的配置按钮,填写企业微信的配置信息。参数说明企业I…

作者头像 李华
网站建设 2026/5/6 10:23:02

【dz-950】基于单片机的音乐播报器设计

基于STM32的音乐播放器的设计与实现 摘要:随着数字音频技术的发展,便携式音乐播放器在人们的日常生活中扮演着重要角色。基于STM32单片机的音乐播放器设计旨在实现多功能、便捷化的音频播放体验。 该播放器以STM32F103C8T6单片机为核心,具备多…

作者头像 李华
网站建设 2026/5/6 14:43:37

TikTok Studio创作者工具打不开怎么办?

TikTok在全球拥有数亿活跃用户,是许多内容创作者实现变现的重要阵地,为了帮助用户更好的使用,TikTok官方推出了TikTok Studio创作者工具,但是在实际使用过程中,有人却遇到了无法使用的问题,本文就将围绕这个…

作者头像 李华
网站建设 2026/5/4 17:44:52

2026年代理IP评测:跨境营销、多账号运营该如何选

随着 2026 年全球平台风控持续升级,无论是跨境电商、联盟营销、广告投放,还是社媒矩阵与数据采集,对高质量代理 IP 服务的依赖都越来越高。代理 IP 已不再只是“换 IP”,而是直接影响到:账号是否被关联广告账户是否稳定…

作者头像 李华