驱动流程分析
GIC驱动的执行流程如下图所示:
- 首先需要了解一下链接脚本
vmlinux.lds
,脚本中定义了一个__irqchip_of_table
段,该段用于存放中断控制器信息,用于最终来匹配设备; - 在GIC驱动程序中,使用
IRQCHIP_DECLARE
宏来声明结构信息,包括compatible
字段和回调函数,该宏会将这个结构放置到__irqchip_of_table
字段中; - 在内核启动初始化中断的函数中,
of_irq_init
函数会去查找设备节点信息,该函数的传入参数就是__irqchip_of_table
段,由于IRQCHIP_DECLARE
已经将信息填充好了,of_irq_init
函数会根据arm,gic-400
去查找对应的设备节点,并获取设备的信息。中断控制器也存在级联的情况,of_irq_init
函数中也处理了这种情况; or_irq_init
函数中,最终会回调IRQCHIP_DECLARE
声明的回调函数,也就是gic_of_init
,而这个函数就是GIC驱动的初始化入口函数了;- GIC的工作,本质上是由中断信号来驱动,因此驱动本身的工作就是完成各类信息的初始化,注册好相应的回调函数,以便能在信号到来之时去执行;
set_smp_process_call
设置__smp_cross_call
函数指向gic_raise_softirq
,本质上就是通过软件来触发GIC的SGI中断
,用于核间交互;cpuhp_setup_state_nocalls
函数,设置好CPU进行热插拔时GIC的回调函数,以便在CPU热插拔时做相应处理;set_handle_irq
函数的设置很关键,它将全局函数指针handle_arch_irq
指向了gic_handle_irq
,而处理器在进入中断异常时,会跳转到handle_arch_irq
执行,所以,可以认为它就是中断处理的入口函数了;- 驱动中完成了各类函数的注册,此外还完成了
irq_chip
,irq_domain
等结构体的初始化,这些结构在下文会进一步分析; - 最后,完成GIC硬件模块的初始化设置,以及电源管理相关的注册等工作;
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网
网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
嵌入式
+关注
关注
5082文章
19104浏览量
304780 -
驱动
+关注
关注
12文章
1838浏览量
85261 -
Linux
+关注
关注
87文章
11292浏览量
209318 -
gic
+关注
关注
0文章
14浏览量
6270
发布评论请先 登录
相关推荐
ARM之中断GIC分析
1.“站的高尿的远” GIC为中断控制器,不要和ARM core的中断搞混了,这些中断都是连接到ARM core的IRQ或者FIQ上的。 要了解arm中断系统,GIC绝对不容错过,好先付
发表于 11-26 13:50
ARM GIC(二)之中断术语的定义
ARM在GIC中,对于中断,定义了如下的一些术语。一、中断状态对于每一个中断而言,有以下4个状态:◾inactive:中断处于无效状态◾pending:中断处于有效状态,但是cpu没有响应该中断
发表于 04-06 10:15
ARM GIC电源管理使用手册指南
与gic中的redistributor进行connect,这样将来gic才可以将中断发送给core。connection的流程如下所示:GICR_WAKER寄存器上电流程,行为描述
发表于 05-27 16:41
一文解析ARM GIC中断线映射与GICD寄存器配置
activate到deactivation均为中断处理函数工作内容。上几篇博文已经详细介绍了GIC 架构基础,稍微有些抽象。接下来尝试从源码和寄存器手册分解TF-A GIC V3驱动源码,进一步理解arm
发表于 05-27 17:24
mfc程序执行流程小结,MFC程序的执行顺序
摘要:本文章主要以MFC程序的执行流程、执行顺序等执行过程的剖析做出的结论,下面一起来看看原文的具体介绍。
发表于 12-08 15:48
•9542次阅读
小电阻器对治理电网GIC的效果分析
地磁感应电流(geomagnetically induced currents,GIC)引起变压器半波饱和对电力系统的安全运行产生不利影响,甚至引发大面积停电事故。为了有效治理GIC对大规模电力系统
发表于 01-04 17:03
•7次下载
GIC是什么意思 GIC硬件原理
GIC硬件原理 ARM公司提供了一个通用的中断控制器 GIC(Generic Interrupt Controller) , GIC 的版本包括 V1 ~ V4 ,由于本人使用的SoC中的中断控制器
GIC驱动设备信息添加
字段:用于与具体的驱动来进行匹配,比如图片中arm, gic-400,可以根据这个名字去匹配对应的驱动程序; interrupt-cells字段:用于指定编码一个中断源所需要的单元个数,这个值为3
GIC-600的组件是如何连接的
为了适应大规模的SoC设计,GIC-600被设计成分布式IP。 所谓分布式,GIC-600由几种组件构成,每个组件可以跟其它相关模块在物理设计上摆放在一起,并与其拥有共同的电源域;组件之间通过片上网
GIC-600的内部结构组件
接下来看看每个组件。 • 首先是distributor,一个SoC只有一个。 •它的组件只能与distributor通信。所以,可以看出,distributor是GIC-600中的核心,其作用是收集
gic和ARM Core的连接
• ◾nVIRQ: 虚拟普通中断 • ◾nVFIQ: 虚拟快速中断 (2)gicv3和ARM Core的连接 gicv3 AXI-stream协议 • ◾gic stream协议,是基于AXI-stream协议
bootm命令的执行流程
Bootm命令用来从memory启动内核,bootm命令的执行流程如下图所示。 在串口终端输入bootm命令后,执行do_bootm函数来完成相应的功能。Do_bootm函数首先
评论