linux 中断 -- 片段记录

本文介绍了Linux系统的中断处理机制,包括如何定义和注册IRQ芯片、请求IRQ、触发和处理中断等关键步骤。还详细解释了使用request_irq()和request_threaded_irq()函数的方法,并概述了中断从硬件触发到被处理的整个流程。

Linux 中断 -- 片段记录

系统中断线是有限的。能由硬件直接触发的中断数量有限。但系统有级连分发机制。即可以在一个中断

handler中去分发以它为父IRQ的子IRQ。要支持一些IRQ,需要下面几个步骤:

1
定义一个struct irq_chip,主要实现下面一些Callbacks:
void  (*ack)(unsigned int irq);
void  (*mask)(unsigned int irq);
void  (*mask_ack)(unsigned int irq);
void  (*unmask)(unsigned int irq);

2 注册IRQ相关信息
  set_irq_chip(i, &at91_aic_chip);
  set_irq_handler(i, handle_level_irq);
  set_irq_flags(i, IRQF_VALID | IRQF_PROBE);
3 request_irq()
  绑定IRQ到某个IRQ handler。

4 分发处理
  generic_handle_irq()直接触发中断

5 最后就转到Irq handler中。
中断上下文是不能sleep的。

6  要中断线程化,用request_threaded_irq()

中断传递过程:
硬件触发 --> CPU --> 中断向量表 --> 中断跳转表 --> 中断描述符表 --> 中断处理函数

参考:
http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值