一. 简介
不管是裸机实验还是 Linux 下的驱动实验,中断都是频繁使用的功能,Linux 内核提供了完善的中断框架,我们只需要申请中断,然后注册中断处理函数即可,使用非常方便,不需要一系列复杂的寄存器配置。
本文来简单学习一些Linux内核中断框架。
二. Linux内核中断API函数
1. 回顾裸机实验中的中断实现
先来回顾一下裸机实验里面中断的处理方法:
1. 使能中断,初始化相应的寄存器。
2. 注册中断服务函数,也就是向
irqTable
数组的指定标号处写入中断服务函数
3. 中断发生以后进入
IRQ
中断服务函数,在
IRQ
中断服务函数在数组
irqTable
里面查找
具体的中断处理函数,找到以后执行相应的中断处理函数。
2. Linux 中断 API 函数
在
Linux
内核中也提供了大量的中断相关的
API
函数,我们来看一下这些跟中断有关的 API
函数:
(1) 中断号
每个中断都有一个中断号,通过中断号即可区分不同的中断,有的资料也把中断号叫做中
断线。在
Linux
内核中使用一个
int
变量表示中断号。
(2) request_irq 函数
在
Linux
内核中要想使用某个中断是需要申请的,
request_irq
函数用于申请中断,
request_irq
函数可能会导致睡眠,因此不能在中断上下文或者其他禁止睡眠的代码段中使用。
request_irq
函数会激活
(
使能