GIC源码系列(一):GIC/ITS框架介绍

在分析代码之前,需要对GIC/ITS作简要介绍,包括GIC/ITS在系统中的位置,GIC/ITS硬件的介绍,中断类型等。

  • GIC即通用中断控制器,是ARM架构中中断产生的硬件;

  • ITS即中断转换服务,是ARM架构中可产生LPI中断的硬件,是可选的,其作用相当于GICD。

1、GIC/ITS在系统中的位置

外设通过中断对CPU通知某些事件的完成。之前外设与中断控制器(GICD)通过线相连,通过中断线通知中断控制器,中断控制器将中断发送给某个CPU。

在这里插入图片描述

当控制器支持基于Message中断时,外设可以通过写某个内存让中断控制器(ITS)产生中断,并将中断发送给某个CPU。基于Message的中断节省了硬件空间,极大的增加了支持的中断数目。(LPI类型中断)

在这里插入图片描述

2 GIC/ITS硬件介绍

对于GICv3,支持LPI中断,可以通过ITS产生LPI中断。

如下图中的GIC,包含如下部分:

  • GICD,用于SPI中断的分发,它会将外设产生的SPI中断路由给对应的GICR
  • ITS,用于LPI中断的产生,它的功能与GICD类似,只不过是针对LPI中断,可以将LPI中断路由给对应的GICR
  • GICR,将收到的中断发往GICC,与GICC一一对应,PPI中断直接发送到GICR
  • GICC,它为CPU接口,在CPU侧,与GICR一一对应,SGI中断由GICC产生

在这里插入图片描述

3 中断类型

GICv3定义了如下中断类型:

  • SGI:软件产生中断,用于核间通信,通常通过写SGI寄存器产生,中断号为0-15。(IPI别名)
  • PPI:私有外设中断,目标为某个特定CPU的外设中断,如CPU的通用timer中断,中断号为16-31
  • SPI:共享外设中断,可以路由到一个或一组CPU的共享外设中断,中断号31-1019
  • LPI:Locality-specific外设中断,中断号8192以上。

4 GIC软硬件之间交互

在这里插入图片描述
对于GICD,软硬件之间的交互如下:

  • 1、GIC驱动通过寄存器访问对GIC(包括GICD和GICR)进行初始化并配置
  • 2、外设与GICD相连,外设产生线中断,并发送给GICDGICD通过配置将中断路由到对应的GICR

5 ITS软硬件之间交互

在这里插入图片描述
对于ITS,软硬件之间的交互如下:

  • 1、外设写内存产生中断给ITS,外设写的内容包含device id和event id,device id用于标识设备,event id用于区分同一个设备不同的中断;

  • 2、ITS在内存中有三张表,Device table用于保存每个device对应的ITT中断转换表,ITT表用于保存设置event id与collection id的对应关系,Collection table用于保存collection id与GICR的对应关系,因此ITS通过这三张表可以知道将中断路由到哪个GICR即哪个CPU;

  • 3、ITS驱动或软件通过三种方式与ITS进行通信:通过直接访问ITS寄存器、通过访问或修改三张表、通过CMDQ队列。

6 软件框架

Linux中断框架大致如下:

  • (1)irq domain layer:用于为GIC/ITS分配irq domain,为不同外设分配中断irq desc,硬中断号与软中断号之间转换等;

  • (2)irq-gicv3为GICv3驱动,irq-gicv4支持GICv4驱动,irq-gicv3-its为ITS驱动;

  • (3)PCI设备和platform设备通过中断相关的API进行中断分配以及中断请求等;(PCI设备使用BDF作为device ID,platform设备使用ACPI表里的device ID。)

  • (4)KVM通过vgic支持中断的虚拟化;

在这里插入图片描述

Note:
PCI是Peripheral Component Interconnect(外设部件互连标准)的缩写,它是目前个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽。
platform总线是一种虚拟的逻辑总线,满足逻辑互联功能。为了统一管理设备,platform可以把物理上不存在总线的一类设备,用平台总线统一把它们管理起来。

(这整的必须得好好的再学一学Linux的中断框架)

前辈原文链接:
https://blog.csdn.net/flyingnosky/article/details/127398599

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "Linux ARM GIC 中断流程" 是指在 ARM 架构的 Linux 操作系统中,使用 Generic Interrupt Controller(GIC)处理器来管理系统中各种中断的流程。它负责将来自不同设备和外部事件的中断请求,分派给适当的处理程序来处理,并确保系统按顺序执行这些处理程序。中断处理是系统中一个重要的组成部分,它允许设备和软件互相通信,并提高了系统的稳定性和可靠性。 ### 回答2: Linux是一个非常流行的开操作系统,可以在不同架构的计算机上运行。ARM架构是一种广泛使用的嵌入式系统架构,因此,许多嵌入式设备都使用Linux作为其操作系统。在ARM架构上,通常会使用GIC(通用中断控制器)来管理中断,这个过程可以分为中断触发、CPU响应和中断处理三个部分。 中断触发是指中断信号从设备到达GIC的过程。当一个设备需要发送一个中断时,它会向GIC发送一个中断请求信号,并指定中断号,这个中断号是唯一的,用于区分不同的中断。GIC会根据中断号去查找到这个中断对应的中断控制器,进而把这个请求传递给指定的CPU。 CPU响应是指CPU接收到中断请求信号后的响应过程。当GIC把中断请求传递给CPU时,CPU需要检查是否允许这个中断请求,也就是检查中断屏蔽寄存器(Interrupt Mask Register)。如果这个中断请求已被屏蔽,则CPU不会响应,否则,它会设置自己的中断挂起寄存器(Interrupt Pending Register),告诉GIC它已经准备好去处理这个中断。 中断处理是指CPU执行中断处理程序,处理具体的中断。当CPU设置了它的中断挂起寄存器后,GIC会向CPU发送一个中断信号。CPU会暂停当前的进程,并把当前的上下文信息(比如,寄存器值)保存到内存中。之后,CPU会跳转到中断处理程序(Interrupt Service Routine),开始执行具体的中断处理代码。中断处理程序完成后,CPU会从内存中恢复之前保存的上下文信息,并恢复之前进程的执行。 总的来说,ARM架构上的Linux操作系统通常使用GIC来管理中断,其中包括中断触发、CPU响应和中断处理三个方面。这个流程对于保证系统的稳定性和快速响应非常重要。 ### 回答3: 在ARM架构的Linux系统中,GIC(Generic Interrupt Controller)被用来管理中断。当发生中断时,GIC会将中断信号发送到CPU,然后CPU会停止当前的进程并处理该中断。 GIC的中断流程如下: 1. 报告中断:设备或其他外部事件引发中断信号,设备向GIC发送中断信号,GIC会产生一个中断标识符,然后将其发给CPU。 2. 响应中断:CPU根据中断标识符查询GIC,查看中断请求的优先级和处理器状态,如果中断请求的优先级高于当前中断处理器,那么CPU会中止当前进程,执行中断处理程序。 3. 中断处理:中断处理程序会读取设备状态,进行相应的操作,处理完成后会发出一个中断信号,通知GIC中断已被处理。 4. 中断结束:GIC收到来自设备的中断完成信号后,将中断标识符置为未激活状态。 在这个流程中,GIC起到了一种路由的作用,将中断信号从设备传输到CPU,同时根据中断请求的优先级来优先处理高优先级的中断。这样就可以保证系统的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值