Linux通用IRQ处理

本文档详细介绍了Linux内核中的通用中断处理层,旨在为设备驱动程序提供中断处理的抽象,支持不同类型的中断控制器硬件。通用API函数用于请求、启用、禁用和释放中断,简化了驱动程序在不同平台的移植。文档涵盖了理论依据、抽象层、中断控制流、处理程序实现等关键概念,为开发中断子系统提供了指导。
摘要由CSDN通过智能技术生成

【推荐阅读】

浅谈linux 内核网络 sk_buff 之克隆与复制

深入linux内核架构--进程&线程

了解Docker 依赖的linux内核技术

OriginalLinux generic IRQ handling

翻译司延腾 Yanteng Si [[email]siyanteng@loongson.cn[/email]](%[email]5Bsiyanteng@loongson.cn[/email]%5D(mailto:siyanteng%40loongson.cn))

校译吴想成 Wu XiangCheng [[email]bobwxc@email.cn[/email]](%[email]5Bbobwxc@email.cn[/email]%5D(mailto:bobwxc%40email.cn))

版权© 2005-2010: Thomas Gleixner

版权© 2005-2006: Ingo Molnar

简介

通用中断处理层是为了给设备驱动程序提供一个完整的中断处理抽象(层)。它能够处 理所有不同类型的中断控制器硬件。设备驱动程序使用通用API函数来请求、启用、禁 用和释放中断。驱动程序不需要知道任何关于硬件处理中断的细节,所以它们可以在不同的 平台上使用而不需要修改代码。

本文档提供给那些希望在通用IRQ处理层的帮助下实现基于其架构的中断子系统的开发 者。

理论依据

Linux中中断处理的原始实现使用__do_IRQ()超级处理程序,它能够处理每种类型的 中断逻辑。

最初,Russell King确定了不同类型的处理程序,以便为Linux 2.5/2.6中的ARM中 断处理程序实现建立一个相当通用的集合。他区分了以下几种类型:

电平触发型

边沿触发型

简单型

在实现过程中,我们发现了另一种类型:

响应EOI(end of interrupt)型

在SMP的__do_IRQ()超级处理程序中,还需定义一种类型:

每cpu型(针对CPU SMP)

这种高层IRQ处理程序的拆分实现使我们能够为每个特定的中断类型优化中断处理的流 程。这减少了该特定代码路径的复杂性,并允许对特定类型进行优化处理。

最初的通用IRQ实现使用hw_interrupt_type结构体及其 <span class="pre">->ack</span> <span class="pre">->end</span> 等回 调来区分超级处理程序中的流控制。这导致了流逻辑和低级硬件逻辑的混合,也导致了 不必要的代码重复:例如i386中的 <span class="pre">ioapic_level_irq</span> 和 <span class="pre">ioapic_edge_irq</span> , 这两个IRQ类型共享许多低级的细节,但有不同的流处理。

一个更自然的抽象是“irq流”和“芯片细节”的干净分离。

分析一些架构的IRQ子系统的实现可以发现,他们中的大多数可以使用一套通用的“irq 流”方法,只需要添加芯片级的特定代码。这种分离对于那些需要IRQ流本身而不需要芯 片细节的特定(子)架构也很有价值——以提供了一个更透明的IRQ子系统设计。

每个中断描述符都被分配给它自己的高层流程处理程序,这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值