free_irq函数功能描述:此函数用于卸载IRQ链表中与输入参数相对应的irqaction描述符,并释放其所占用的内存空间。
功能实现过程:首先调用函数__free_irq( ),函数__free_irq( )根据参数irq找到数组irq_desc中对应的元素desc,如果不存在则返回NULL,如果存在则根据dev找到对应的irqaction标识符,如果不存在对应的irqaction标识符则返回NULL,如果存在则进行一定的操作,最后返回该irqaction标识符。然后函数free_irq( )调用函数kfree( )释放该标识符所占用的空间。
free_irq文件包含
#include<linux/interrupt.h>
free_irq函数定义
在内核源码中的位置:linux-3.19.3/kernel/irq/manage.c
函数定义格式:
void free_irq(unsigned int irq, void * dev)
free_irq输入参数说明
- 参数
irq
是unsigned int型变量,代表操作中断对应的中断号,与数组irq_desc中元素的下标相对应,根据它查找对应设备的中断服务例程,其取值范围是0~NR_IRQS-1,其中NR_IRQS的值是16640。 - 参数
void *dev
是对应的设备描述符,可能的取值是系统内所有已经存在的并且挂载在IRQ链表中对应的设备,当设备不真实存在时可取NULL。
free_irq返回参数说明
此函数的返回值是void类型变量,即函数不返回任何值。
free_irq实例解析
此函数不进行单独测试,测试程序及结果详细分析参考函数request_threaded_irq( )分析文档的实例解析及结果分析部分。