linux 下ARC的中断机制

news2024/10/9 6:22:41

linux 下ARC的中断机制

一、Idu 中断控制器初始化

Idu 是arc 处理器内部中断控制模块, 类似于arm 内部的gic 中断控制模块

首先,Idu中断控制器在初始化时, 会解析DTS信息中定义了几个idu控制器,每个Idu控制器注册一个struct irq_domain数据结构。

DTS(arch/arc/boot/dts)和中断相关的信息如下:
在这里插入图片描述

struct irq_domain用于描述一个中断控制器, 这个结构体很重要, dts 的信息会保存在这里面, 另外这里面还会保存hwirq和virq 的对应关系。
在这里插入图片描述

初始化的流程如下:
linux 正常流程会先进入Start_kernel 函数, 然后进入Init_IRQ进行初始化,后面会进入Irqchip_init函数,

在这里插入图片描述

__irqchip_of_table 就是内核irq chip table的首地址,这个table也就保存了kernel支持的所有的中断控制器的ID信息(用于和device node的匹

配),这些信息保存在.init.ramfs section 中, of_irq_init 函数实际上就是根据DTS 的内容去进行搜索匹配,一旦匹配到,就调用该interrupt

controller的初始化函数,并把该中断控制器的device node以及parent中断控制器的device node作为参数传递给irq chip driver。

__irqchip_of_table 的内容是通过IRQCHIP_DECLARE的宏来实现的,如下图所示,这个宏其实就是初始化了一个struct of_device_id的静态

常量,并放置在__irqchip_of_table_end中。

在这里插入图片描述

idu_of_init 函数的功能如下:在这里插入图片描述

(a). 读取IDU的最大支持的中断数目

(b). 分配一个 irq_domain 的结构,一个 irq_domain 代表了一个 IDU控制器

©. 在irq_default_domain中,将hwirq和virq进行映射,irq_create_mapping

中domain 参数是NULL, 所以使用default domain, 所以,virq 是等于 hwirq

的,不做转换。然后设置中断响应函数入口为:idu_cascade_isr
在这里插入图片描述

在这里插入图片描述

二、中断处理流程

处理器正常中断处理程序(handler)一般包含4个步骤:

(1) 保存现场,保存各个寄存器的值

(2) 运行处理中断的需要的命令

(3) 恢复现场,恢复各个寄存器的值

(4) 返回到进行中断处理前的地方继续运行
在这里插入图片描述


以 arc 处理器为例, 外部产生中断信号后的流程如下:

首先, 进入异常向量表(vectors), 跳转到相应的异常中断(arch/arc/kernel/entry-arcv2.S),正常会跳转到handle_interrupt

函数, 该函数会进行 保存现场,处理中断和恢复现场 的工作,具体如下:

在这里插入图片描述

在arc中 vector table, 如下图所示,前面16个是异常向量表, 后面开始是中断向量表, 都会跳转到handle_interrupt 函数
在这里插入图片描述

主要工作分为三个部分:

1、保护现场

将arc 的寄存器进行压栈处理,需要注意的是,arc 处理器会对大部分寄存器进行自动压栈,但是,仍然有少部分寄存器需要我们

手动压栈(r12, r25, r30, sp, fp, gp,ACCL pair)

2、中断处理

保存完现场后,就会执行中断跳转函数 arch_do_IRQ

b.d arch_do_IRQ

arch_do_IRQ 函数会把硬件中断号传递给handle_domain_irq 函数, handle_domain_irq 函数内部调用__handle_domain_irq函数

在这里插入图片描述

__handle_domain_irq 函数是中断处理的核心函数, 内部需要关注的函数有四个, 分别如下:
在这里插入图片描述

其中,由于触发中断后,不知道domain信息,所以 irq_find_mapping中domain 的参数为NULL,默认在irq_default_domain中根据hwirq找到

virq (Linux的irq), generic_handle_irq参数是irq号,这个是linux 中断号,irq_to_desc()根据irq号找到对应的struct irq_desc。

然后调用irq_desc->handle_irq处理对应的中断, 会先调用idu_cascade_isr的中断处理函数(一级中断函数),这是一个idu提供的标准中断,

后面再调用具体中断函数。

在这里插入图片描述

三、初始化&处理具体中断

这里简单举一下pcie中断的例子:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/191125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式Linux系统开发笔记(十三)

U-Boot烧写验证测试 正点原子专门编写了一个软件来将编译出来的.bin 文件烧写到 SD 卡中,这个软件叫做“imxdownload” 【1】将 imxdownload 拷贝到工程根目录下 【2】给予 imxdownload 可执行权限 我们直接将软件 imxdownload 从 Windows 下复制到 Ubuntu 中以…

【干货】Windows下cmd中cd命令的使用方法

【干货】Windows下cmd中cd命令的使用方法什么是cd命令cd命令的使用打开cmdcd命令的常用方法进入某个盘进入某个目录返回上一级目录返回至当前工作目录下的根目录参考什么是cd命令 此处介绍两个概念: cmd:命令提示符cd:全称change directory…

model.train()与model.val()

一、问题描述 需要将mmpose框架下训练的模型单独保存出来,做后续处理。用torch.save()直接保存模型mmpose_model.pt,然后重新搭建模型,把保存的模型参数加载进去,得到scratch_model.pt使用scratch_model.pt进行推理,与…

基于Jmeter的百万级tps性能测试实践

【CSDN 编者按】如何对系统的承载能力和响应时间做出准确的评估,为资源的合理配置及优化提供依据,性能测试就成了必不可少的测试手段,本文会给读者推荐一款业界占有率最高的一款性能测试工具——Jmeter。 本文作者朱凯是环信测试主管&#x…

TCP实现回显服务器及客户端

目录 前言: Socket API SeverSocket API TCP中的长短连接 TCP实现回显服务器 代码实现(有详细解释) TCP实现回显客户端 代码实现(有详细注释) 小结: 前言: 上篇文章介绍了TCP的特点。由…

195136-58-4,2‘,7‘-Difluorofluorescein,2,7-二氟荧光素

产品描述:2,7-二氟荧光素中Fluorescein (Uranine) 生物应用中的荧光示踪剂,Fluorescein (Uranine) 是一种具有代表性的绿色荧光团,已被广泛用作实用绿色荧光探针的支架。结构式:理论分析:中文名&#xff1a…

1608_PC汇编语言_first例程分析

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 这一次的笔记主要是梳理一个例程以及部分辅助信息。 为什么要学习汇编语言呢?现在的高级语言开发效率高,而且有着不错的效率,是…

Compose之跨平台Activity页面

前言 Compose(Jetpackjb)是可以跨平台的 目前跨平台主流的页面导航方式一般有两种 一种是都在同一个页面内进行页面替换类型的导航,类似于单Activity,多Fragment 另一种是不同的页面在不同的页面载体上,类似多Activity 两种页面导航方式都可以使用,但我比较偏向于使用多Ac…

加密签名算法

序言如果我们要消费的一段字符串没有唯一标识,我们该如何防止重复消费.cuiyaonan2000163.com背景信息加密加密技术是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原&…

【虚拟仿真】Unity3D中实现鼠标悬浮模型上显示文字

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 在仿真项目开发中,会遇到让鼠标悬浮模型后显示模型…

《流浪地球2》MOSS出圈,现实中的量子计算机长啥样?

科技云报道原创。 春节档科幻电影《流浪地球2》上映后,影片中被誉为“全场最有价值道具”的智能量子计算机MOSS(代号550W)火了! 如果你看完了片尾彩蛋,会发现MOSS或许是整个流浪地球系列电影中的最大反派&#xff0c…

支持向量机-数学模型

支持向量机(support vector machines, SVM)是一种二分类模型。基本模型是定义在特征空间上的间隔最大的线性分类器;学习策略:间隔最大化;学习算法:求解凸二次规划的最优化算法。 支持向量机分为线性可分支…

自动驾驶感知——激光雷达基本概念|激光雷达点云|激光雷达的标定

文章目录1. 激光雷达基本概念1.1 激光雷达特点1.2 激光雷达测距原理1.2.1 系统组成1.2.2 激光雷达测距原理1.3 常见的激光雷达1.3.1 机械旋转式激光雷达1.3.2 Velodyne HDL-64E1.3.3 固态激光雷达1.3.4 Flash型固态激光雷达1.3.5 相控阵固态激光雷达1.3.6 MEMS型固态激光雷达1.…

NX二开ufun函数UF_MODL_create_surf_from_cloud(使用现有点创建B曲面)

本节主要讲使用现有点创建B曲面的ufun函数UF_MODL_create_surf_from_cloud,这些点可以按任何顺序出现,但是必须有足够的点来定义平面。 先看实例效果图: 1、函数结构 int UF_MODL_create_surf_from_cloud ( int point_cnt&#…

双栏Latex模板插入多个图片的各种排布

目录 问题描述: 问题解决: 1. 插入一个图片 示意图如下: 2.插入2x1两个图片:2x1 示意图如下: 3. 插入1x2两个图片:1x2 示意图如下: 4.插入2x2两个图片:2x2 示意图如下&…

shell脚本set -eu引起的学习笔记

本文将介绍Bash中 set -euxo pipefail 大佬的文章学习膜拜体验,它们可以帮助你写出更容易维护也更安全的脚本。这也是Bash脚本的终极调试手段,希望你以后在自己的脚本中加上这么一行,头顶也能少秃一点 今天打开一个脚本《JetsonNano使能SPI总…

00后真的是躺平的一代吗?已经被公司新来的00后卷哭了

2023年开年了,公司也来了许多新面孔,其中居然有一个是00年的,虽然也给公司带来了一些新的血液,但也让我意识到,自己年级确实不小了。这小老弟是去年毕业的,在某软件公司干了半年,现在跳槽到我们…

java常用类: String,StringBuffer和StringBuilder的底层区别

java常用类型: Ineteger等包装类 String类,StringBuffer类和StringBuilder类 Math类及常用方法 System类及常用方法 Arrays类及常用方法 BigInteger类和BigDecimal类及常用方法 日期类Date类,Calender类和LocalDateTime类 文章目录String介绍String创建细节String s…

大数据技术架构(组件)13——Hive:字符串函数

1.4.7、字符串函数1.4.7.1、asciiselect ascii(a);1.4.7.2、base64-->Hive0.12.0select base64(cast(abcd as binary));1.4.7.3、character_length-->Hive2.2.01.4.7.4、chr-->Hive1.3.01.4.7.5、concatselect concat(1,1,2,a),concat(1,a,null);1.4.7.6、context_ngr…

【JavaSE】ArrayList的扩容机制源码分析

文章目录1. ArrayList概述2. ArrayList构造方法源码分析3. ArrayList.add()源码分析4. ArrayList.addAll()源码分析5. 总结1. ArrayList概述 ArrayList是Java集合框架中比较常用的一个数据结构了,它底层是基于数组实现的。数组是固定大小的,但是ArrayLi…