arm GIC介绍之四

本文介绍了ARM Generic Interrupt Controller (GIC)的中断处理流程,包括硬件中断如何转化为软件中断,以及IRQ_DOMAIN的概念和作用。阐述了GIC在软件层面的中断管理和硬件交互的机制,强调了中断分流和处理的层次结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GIC是ARM体系中重要的组件,在认识到GIC的组成和功能之后,了解到IRQ的大致流程,从硬件IRQ到来,到IRQ结束。我们实际在KERNEL里面,或者在设备驱动里面处理的IRQ其实是软件意义上的,那么硬件的中断和软件的中断如何联系起来的呢,大概的处理流程是如何呢?
这章我们介绍这部分内容。

GIC 中断处理流程

我们希望理解概念和流程,总结认识和思路,所以代码细节上的解释需要忽略掉。可以看代码细节,但是总结时候要去掉。毕竟,即使是自己看过了,过了一段时间再重新读代码,也是有些陌生的。我们还是以图开始。

HW ARCH
我们在之前介绍“arm GIC介绍之一/二/三”:
http://blog.csdn.net/sunsissy/article/details/73791470
http://blog.csdn.net/sunsissy/article/details/73842533
http://blog.csdn.net/sunsissy/article/details/73842533
一直在强调,GIC上对物理的IRQ的处理,比如上图,一个DEVICE_1上触发一个IRQ,到GIC,HWIRQ为111,如果软件侧管理中断不冲突的话,可以直接映射desc_irq 111,以此为结构并处理。但是实际中并不这么完美。
比如图中另外一个DEVICE,同时来了3个信号,或者说,而这个设备和GIC只有一个IRQ的物理连接通路,只能传递一个IRQ信号,那么这又如何表示和区分3个信号呢,如何和CPU的软件意义上的IRQ联系起来呢?
这就新增加了IRQ_DOMAIN的概念。

struct irq_domain {  
   struct list_head link;  
   const char *name;  
   const struct irq_domain_ops *ops; //callback函数 
   void *host_data;//this will point to irq_data, and contains gicd_base, info and so on.
    /* Optional data */   
   struct device_node *of_node;//该interrupt domain对应的interrupt controller的device node  
   struct irq_domain_chip_generic *gc; //generic irq chip concept , we ignore this.
    /* reverse map data. The linear map gets appended to the irq_domain */
    irq_hw_number_t hwirq_max; //该domain中最大的那个HW inter
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值