linux中断系统中,重要的数据结构

1、硬件中断的发生

这里举得例子有点难度,我们先来介绍一下:什么是共享中断?
多个中断源,使用同一个GPIO引脚(这个GPIO引脚,已经配置好了,用做中断引脚)。
在这里插入图片描述

2 中断系统中用到的关键结构体:

在这里插入图片描述

3 硬件中断号和虚拟中断号

3.1 假设,有两个中断,分别是GPIO1模块中的5号中断和GPIO2模块中的5号中断。
在这里插入图片描述
虽然他们用的是同一号中断,但是属于不同的模块。显然,在设备树中,他们的配置是不同的。在设备树中,指定一个中断的方式如下:

//表示要使用的GPIO 1模块里面的引脚
interrupt - parent = <&gpio1>;
//表示使用5号中断,上升沿触发
interrupts = <5 IRQ_TYPE_EDGE_RISING>;

//表示要使用的GPIO 2模块里面的引脚
interrupt - parent = <&gpio2>;
//表示使用5号中断,上升沿触发
interrupts = <5 IRQ_TYPE_EDGE_RISING>;

3.2 结构体的属性分析:

在这里插入图片描述

3.3 irq_domain

这个结构体的功能主要有两个:
1)、通过解析设备树中的中断属性,提取出hwirq(硬件中断号)等信息。
2)、将局部的hwirq(硬件中断号)转换为全局的irq(虚拟中断号)—》他们之间的映射关系会保存在irq_domain结构的一个成员数组里面。
虚拟中断号会保存在platform_device里面,这样,就可以使用request_irq()函数来注册这个中断了。
学习到这里,我们可以对上面的内容,进行一下完善(完善中断A的中断函数的内容):
在这里插入图片描述
那我,还存在另外一个疑问,中断A是如何和irq_domain联系起来呢?
事实上,它位于irq_data结构体里面,里面的一个成员结构体就是irq_domain.
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cainiaofu/article/details/115725445
今日推荐