LDD3学习笔记(13):中断处理

本文深入探讨了Linux中断管理机制,包括如何注册和注销中断处理程序,以及使用特定标志进行中断处理的配置。同时介绍了如何通过`/proc/interrupts`和`/proc/stat`文件监控中断活动,以及如何使用`probe_irq_on`和`probe_irq_off`函数来检测设备使用的中断线。文章还详细解释了如何启用和禁用中断报告,并提供了在当前处理器上禁止和启用中断的方法。
#include<linux/interrupt.h>

intrequest_irq(unsignedintirq,irqreturn_t(*handler)(),unsignedlongflags,constchar*dev_name,void

*dev_id);

voidfree_irq(unsignedintirq,void*dev_id);

调用这个注册和注销一个中断处理.

#include<linux/irq.h.h>

intcan_request_irq(unsignedintirq,unsignedlongflags);

这个函数,i386x86_64体系上有,返回一个非零值如果一个分配给定中断线的企图成功.

#include<asm/signal.h>

SA_INTERRUPT

SA_SHIRQ

SA_SAMPLE_RANDOM

request_irq的标志.SA_INTERRUPT请求安装一个快速处理者(相反是一个慢速的).

SA_SHIRQ安装一个共享的处理者,并且第3flag声称中断时戳可用来产生系统熵.

/proc/interrupts

/proc/stat

报告硬件中断和安装的处理者的文件系统节点.

unsignedlongprobe_irq_on(void);

intprobe_irq_off(unsignedlong);

驱动使用的函数,当它不得不探测来决定哪个中断线被设备在使用.probe_irq_on的结果必

须传回给probe_irq_off在中断产生之后.probe_irq_off的返回值是被探测的中断号.

IRQ_NONE

IRQ_HANDLED

IRQ_RETVAL(intx)

从一个中断处理返回的可能值,指示是否一个来自设备的真正的中断出现了.

voiddisable_irq(intirq);

voiddisable_irq_nosync(intirq);

voidenable_irq(intirq);

驱动可以使能和禁止中断报告.如果硬件试图在中断禁止时产生一个中断,这个中断永远丢

失了.一个使用一个共享处理者的驱动必须不使用这个函数.

voidlocal_irq_save(unsignedlongflags);

voidlocal_irq_restore(unsignedlongflags);

使用local_irq_save来禁止本地处理器的中断并且记住它们之前的状态.flags可以被传递给

local_irq_restore来恢复之前的中断状态.

voidlocal_irq_disable(void);

voidlocal_irq_enable(void);

在当前处理器熵无条件禁止和使能中断的函数.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值