- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux中断之中断注册
linux 中断之 断注册
专业的linux 驱动开发离不开中断处理,在处理中断,首先要注册中断,在linux 下通过
request_irq 来注册中断的,不同内核版本,注册中断所需要的参数也不同,本文以
linux-2.6.34 为例,对比老版本进行说明。
request_irq()函数在include/linux/interrupt.h 中定义,原型为:
static inline int __must_check
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
const char *name, void *dev)
参数说明:
unsigned int irq:注册中断服务程序对应的硬件中断号;
irq_handler_t handler:注册的中断服务程序,函数指针,原型定义为:typedef
irqreturn_t (*irq_handler_t)(int, void *);
unsigned long flags:中断标志,表明中断程序的属性,注意,在新老内核中,相关
属性定义不同。具体参考后面的中断标志位说明;
const char *name:与该中断相关联的名称,在/proc/interrupt 中可看到。
void *dev:中断服务程序的参数,可以为NULL,但在注册共享中断时,此参数不能
为NULL。
中断标志位
新版本中的IRQF_XXX 替代了老版本中的SA_XXX,主要标志包括以下:
IRQF_DISABLED:快速中断标志,对应老版本中的SA_INTERRUPT 标志,表明在处
理本中断时屏蔽所有中断,而在没设置此标志位的程序中,都是开中断处理的,可以进行中
断嵌套。
IRQF_SAMPLE_RANDOM:用于随机数据产生;
PDF 文件使用 pdfFactory Pro 试用版本创建
IRQF_SHARED:用于共享中断,设置此标志时,request_irq 最后一个参数dev 不能
为NULL,对应老版本内核的SA_SHIRQ;
IRQF_PROBE_SHARED:探测共享中断;
IRQF_TIMER: 用于定时中断;
IRQF_PERCPU:Interrupt is per cpu
IRQF_NOBALANCING:Flag to exclude this interrupt from irq balancing
IRQF_IRQPOLL:Interrupt is used for polling(only the interrupt that is
registered first in an shared interrupt is considered for performance reasons)
IRQF_ONESHOT:Interrupt is not reenabled after the hardirq handler finished.
Used by threaded interrupts which need to keep the irq line disabled until the
threaded handler has been run.
注册中断
相关实现在kernel/irq/manage.c 中。
文档评论(0)