中断注册函数与卸载函数

Posted zhangshuaifeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中断注册函数与卸载函数相关的知识,希望对你有一定的参考价值。

ARM架构的CPU异常向量的基址可以是0x00000000,也可以是0xffff0000,Linux内核使用后者,这是一个虚拟地址,当建立了虚拟地址和物理地址的映射之后就可以把异常向量的基址定位到这里来(即把跳转指令复制到这里来),

 

用户注册中断处理函数:request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev_id),其中irq为中断号(在irq.h中定义),handler为处理函数,flags表示上升沿/下降沿等触发方式。它可以完成:分配一个irqaction结构并且调用setup_irq把这它链入链表;设置引脚;使能中断

 

卸载中断处理函数:free_irq(unsigned int irq, void *dev_id)

它需要用到两个参数:irq和dev_id,它们与通过request_irq注册中断函数时使用的参数 一样。使用中断号irq定位action链表,再使用dev_id在action链表中找到要卸载的表项。 所以,同一个中断的不同中断处理函数必须使用不同的dev_id来区分,这就要求在注册共享中断时参数dev_id必须唯一。它可以完成出链和禁止中断。

以上是关于中断注册函数与卸载函数的主要内容,如果未能解决你的问题,请参考以下文章

linux中断管理

linux内核网络收包过程—硬中断与软中断

中断探究

linux 中断管理

request_irq() | 注册中断服务

Linux中断处理流程