Linux驱动中断下半部的三种方法

什么是中断下半部

当产生一个中断时,会进入中断处理程序。

中断处理程序必须快速、异步、简单的对硬件做出迅速响应并完成那些时间要求很严格的操作。

因此,对于那些其他的、对时间要求相对宽松的任务,就应该推后到中断被激活以后再去运行

这样,整个中断处理流程就被分为了两个部分

第一个部分是中断处理程序(上半部),内核通过对它的异步执行完成对硬件中断的即时响应。
中断处理流程中的另外那一部分,下半部(bottom half)

下半部的任务主要是执行与中断相关的工作,这些工作没有被中断服务程序本身完成

Linux驱动中断下半部的三种方法

下半部并不需要指明一个确切时间,只要把这些任务推迟一点,让它们在系统不太繁忙并且中断恢复后执行就可以了。

上半部和下半部的主要区别

上半部指的是中断处理程序下半部则指的是一些虽然与中断有相关性但是可以延后执行的任务。

上半部中断不能被相同类型的中断打断,而下半部依然可以被中断打断

通常下半部在中断处理程序一返回就会马上运行。

上半部分简单快速,执行的时候禁止一些或者全部中断。

下半部分稍后执行,而且执行期间可以响应所有的中断。

Linux中,对中断下半部的实现主要有三种:

软中断
tasklet
工作队列

softirq

softirq即软中断,代码位于kernel/softirq.c文件中;

每个软中断由softirq_action结构表示:

Linux驱动中断下半部的三种方法

softirq.c中定义了一个软中断向量数组softirq_vec

static struct softirq_action softirq_vec[NR_SOFTIRQS] __cacheline_aligned_in_smp;      enum      {         HI_SOFTIRQ=0, /*用于高优先级的tasklet*/         TIMER_SOFTIRQ, /*用于定时器的下半部*/         NET_TX_SOFTIRQ, /*用于网络层发包*/         NET_RX_SOFTIRQ, /*用于网络层收报*/         BLOCK_SOFTIRQ,         BLOCK_IOPOLL_SOFTIRQ,         TASKLET_SOFTIRQ, /*用于低优先级的tasklet*/         SCHED_SOFTIRQ,         HRTIMER_SOFTIRQ,         RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */         NR_SOFTIRQS     };

数组的成员数由NR_SOFTIRQS决定,是一个枚举常量。

新增一个软中断时,需要在文件include/linux/interrupt.h 中添加一个枚举常量。

软中断使用的几个要点

一个软中断不会抢占另外一个软中断。
惟一可以抢占软中断的是中断处理程序。
其他的软中断可以在其他处理器上同时执行。

相关接口

注册软中断
void open_softirq(int nr, void (*action)(struct softirq_action *))

即注册对应类型的处理函数到全局数组softirq_vec中。

触发软中断
void raise_softirq(unsigned int nr)

实际上即以软中断类型nr作为偏移量会置位irq_stat[cpu_id]的成员变量__softirq_pending.

__softirq_pending字段中的每一个bit,对应着某一个软中断,某个bit被置位,说明有相应的软中断等待处理。

这也是同一类型软中断可以在多个cpu上并行运行的根本原因。

软中断实例

以一个按键驱动的中断处理为例,将按键驱动的中断处理分成上下两部分:

上半部:读取键值,触发软中断
下半部:唤醒进程
Linux驱动中断下半部的三种方法

软中断的注册,在驱动的入口函数,注册软中断:

Linux驱动中断下半部的三种方法

添加的枚举常量:

Linux驱动中断下半部的三种方法

可以看到,使用软中断是需要修改内核,添加一个枚举的,有些繁琐。

所以,通常我们不建议擅自增加软中断的数量,如果需要新的软中断,尽可能把它们实现为基于软中断的tasklet形式。

tasklet

tasklet是利用软中断实现的一种下半部机制

那是用软中断还是tasklet好呢?

选择到底是用软中断还是tasklet其实很简单:

通常你应该用tasklet就像我们在前面看到的,软中断资源有限,也麻烦,而且软中断的使用者屈指可数。它只在那些执行频率很高和连续性要求很高的情况下才需要。
tasklet却有更广泛的用途。大多数情况下用tasklet效果都不错,而且它们还非常容易使用。
因为tasklet是通过软中断实现的,所以它们本身也是软中断

tasklet使用

tasklet的使用步骤如下:

1、编写tasklet处理函数(下半部

void my_tasklet_fun (unsigned long data)

2、声明tasklet

//静态 DECLARE_TASKLET(my_tasklet,my_tasklet_fun,data); //动态Struct  tasklet_struct xxx;tasklet_init(&xxx,tasklet_handler,dev)

3、调度 tasklet

tasklet_schedule(&my_tasklet);

登记my_tasklet, 然后允许系统在合适的时间调度它。

tasklet实例

以按键中断驱动为例:

Linux驱动中断下半部的三种方法

先使用DECLARE_TASKLET静态声明一个tasklet,指定其下半部函数为btn_tasklet_func,在中断服务函数(上半部)获取按键值后,调用tasklet_schedule调度。

work queue

work queue工作队列,也是中断下半部的一种。

Work queue将下半部工作推迟给一个内核线程去执行 ——work 总是运行于进程上下文.

两个要点

如果推迟的工作需要睡眠,则使用work queues。否则使用softirqtasklets.
Work queues适用于需要分配大量的内存,获得一个信号量,或者执行阻塞的I/O的情况.

工作队列的相关接口函数:

Linux驱动中断下半部的三种方法

在使用上,工作队列tasklet是类似的:

Linux驱动中断下半部的三种方法

以上就是Linux驱动中断下半部的三种方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/110520.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月23日 08:15:17
下一篇 2025年11月23日 09:26:38

相关推荐

  • Internet Computer(ICP)币是什么?如何运作?市场价格预测

    尽管加密货币市场整体遭遇显著回调,ICP币却展现出强劲的上涨势头,成为当前市场的焦点之一。数据显示,过去24小时内,ICP币价格上涨了13.1%,而在过去七天内更是实现了高达93.13%的惊人涨幅,几乎实现翻倍。目前,该代币市值已攀升至31.2亿美元,单日交易额激增至6.784亿美元,显示出市场参与…

    2025年12月9日
    000
  • 持有比特币和持有比特币ETF,有什么本质区别?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 持有比特币与比特币ETF,虽然都与比特币价格挂钩,但本质是两种不同投资方式。前者是直接拥有并控制一项去中心化的数字资产,后者则是通过传统金融市场间接持有,二者在所有…

    2025年12月9日
    000
  • 币安存贷易是什么?跟其他币安理财产品有何差异?币安存贷易放贷及借币教学

    %ignore_a_1%存贷易让有闲置资金或借款需求的用户,可以透过类似下单的方式,直接满足彼此需求,不仅利率公开透明,也更能反应真实行情。 Binance币安 欧易OKX ️ Huobi火币️ 这篇文章就来深入解析币安存贷易的概念、规则、适合对象及使用方式,无论你打算放贷领收益,还是借币开杠杆,都…

    2025年12月9日 好文分享
    000
  • 加密货币术语黑话大全:HODL, FUD, FOMO是什么意思

    踏入加密货币世界,您会频繁遇到一些独特的“黑话”。理解这些术语是新手融入社区的第一步,它们能帮您更好地把握市场情绪和投资动态。 HODL:坚定的信仰者 1、HODL实际上源于一个拼写错误,本意是“HOLD”(持有),但因其生动地表达了在市场波动中坚定持币的信念而被广泛流传下来。 2、这个词代表着一种…

    2025年12月9日
    000
  • 谁是中本聪?揭秘比特币创始人的十大神秘传说

    “中本聪”是比特币创始人的化名,其真实身份至今成谜。这位神秘人物在2008年发布了比特币白皮书,并于2009年创造了首个区块,随后便销声匿迹,留下了无数传说。 个人身份的几大猜想 1、多利安·中本(Dorian Nakamoto):一位日裔美国物理学家,因姓名巧合一度被认为是中本聪本人,但他公开否认…

    2025年12月9日
    000
  • 从Ping到PayAI,X402协议如何引领AI经济体新模式?

            在这个时代中,传统的计算和交互模式面临着新的挑战,而x402协议的出现,则为ai经济体构建了一种全新的、高效且安全的运作模式。它不仅仅是一个技术规范,更是一种理念的 ,旨在解决ai系统间协作、价值交换和资源分配等核心问题。 从最初简单的“Ping”响应,到复杂的“PayAI”服务,X…

    2025年12月9日
    000
  • 免费查看币圈行情网站推荐_十大虚拟货币行情查询平台

    对于任何加密货币投资者来说,实时、准确的行情数据是做出明智决策的基础。本文将为您盘点十大免费且功能强大的虚拟货币行情查询平台,帮助您轻松掌握市场动态,从海量数据中发现价值。 1. 币安 (Binance) 作为全球领先的加密货币交易所,币安不仅提供交易服务,其网站和App内嵌的行情中心本身就是极佳的…

    2025年12月9日
    000
  • 免费虚拟货币行情平台大全_币圈实时行情查询网站汇总

    对于任何%ignore_a_1%投资者而言,一个功能强大、数据全面的行情查询平台是必不可少的工具。这些平台不仅提供实时的价格波动,还集成了k线图、深度图、行业资讯和市值排名等关键信息,帮助用户做出更明智的投资决策。本文将为您汇总并介绍当前市场上最受欢迎的免费虚拟货币行情查询网站。 主流虚拟货币行情平…

    2025年12月9日
    000
  • 免费加密货币行情查看网站_币圈实时行情查询平台推荐

    对于%ignore_a_1%投资者而言,实时、准确的行情数据是做出交易决策的关键。一个优秀的行情查询平台不仅能提供价格波动,还能展示深度图表、资金流向和相关资讯。本文将为您推荐几个主流且功能强大的免费加密货币行情查看网站,帮助您轻松掌握市场脉搏。 主流币圈行情查询平台推荐 1、币安 (Binance…

    2025年12月9日
    000
  • 虚拟币机构持仓怎么看 虚拟币机构持仓数量怎么看

    binance币安交易所 Binance币安注册入口: Binance币安APP下载: 欧易OKX交易所 欧易(OKX)注册入口: 欧易(OKX)注册APP下载: 火币HTX交易所: 注册入口: APP下载: 了解机构投资者的持仓动向,是洞察市场趋势和信心的重要窗口。对于普通投资者而言,掌握这些关键…

    2025年12月9日
    000
  • 十大交易所排行榜最新_2025全球十大数字货币交易所排名

    币安:交易量最大、币种最全,产品覆盖现货至理财;2. 欧易:衍生品强势,Web3账户成桥梁;3. 火币(HTX):历史悠久,亚洲影响力强;4. Gate.io:山寨币丰富,上新快;5. Coinbase:合规标杆,法币友好;6. Kraken:安全可靠,欧洲份额高;7. KuCoin:新兴项目多,社…

    2025年12月9日
    000
  • 币圈免费看行情网站合集_十大免费加密货币行情平台推荐

    对于加密货币投资者而言,实时、准确的行情数据是做出明智决策的基础。本文为您精选了十大顶级的免费加密货币行情平台,无论您是新手还是资深交易员,都能在这些网站上找到所需的市场信息、图表工具和深度数据,从而有效把握市场脉搏。 十大免费加密货币行情平台 1. 币安 (Binance) 作为全球领先的加密货币…

    2025年12月9日
    000
  • 狗狗虚拟币还有多少个?怎么买?

    %ignore_a_1%币安交易所 Binance币安注册入口: Binance币安APP下载: 欧易OKX交易所 欧易(OKX)注册入口: 欧易(OKX)注册APP下载: 火币HTX交易所: 注册入口: APP下载: 狗狗虚拟币(Dogecoin)的总量没有上限,每年会新增固定数量的币。获取它通常…

    2025年12月9日
    000
  • 人工智能如何颠覆加密交易?详解3款AI交易机器人

    人工智能(ai)正以前所未有的方式重塑加密货币交易领域。ai技术通过强大的数据分析和自动化能力,为交易者提供了更高效、更智能的决策工具,彻底改变了传统交易模式。 AI如何重塑加密货币交易格局 1、人工智能能够实时处理和分析海量的市场数据,包括价格波动、交易量和历史图表。它能识别出人类难以察觉的复杂模…

    2025年12月9日
    000
  • 迷因币与比特币有什么区别?怎么在交易所购买?

    迷因币与比特币,两者都是数字资产领域的杰出代表,但在其核心理念、技术实现、市场定位及价值驱动因素上存在显著差异。比特币作为首个区块链应用,开创了去中心化数字资产的先河,其设计初衷是成为一种点对点的电子现金系统,旨在摆脱传统金融机构的束缚,提供安全、透明且不可篡改的交易记录。 而迷因币则通常源于互联网…

    2025年12月9日
    000
  • Wormhole (W) 币是什么?跨链桥龙头项目的空投与价值分析

    主流币交易平台推荐: 欧易OKX: Binance币安: 火币Huobi: Gateio芝麻开门: Wormhole是领先的跨链消息传递协议,旨在连接不同区块链,实现资产和数据的无缝流转。其原生代币W的空投引发市场广泛关注,巩固了其作为跨链桥龙头项目的地位。 Wormhole (W) 核心价值 1、…

    2025年12月9日
    000
  • okx全球数字资产交易平台官网地址 欧易okx交易所APP下载安装

    本文将为您提供官方%ignore_a_1%的下载链接和详细的安装指导,通过点击本文提供的下载链接,即可轻松获取最新版本的应用程序,开启您的数字资产之旅。 一、okx全球数字资产交易平台官网 OKX安卓APP下载:(支持直接安装) OKX苹果APP下载:(支持客户端及移动端) OKX交易平台官网直达:…

    2025年12月9日
    000
  • Pyth Network (PYTH) 是什么?预言机新星挑战Chainlink的底气何在?

    pyth network是一个新兴的去中心化预言机项目,旨在为区块链应用提供高保真、高频率的金融市场数据。它凭借独特的运行机制和强大的数据源,正迅速成为行业巨头chainlink的有力挑战者。 Pyth Network的核心机制是什么? 1、Pyth Network的核心是其首创的第一方数据源模式。…

    2025年12月9日
    000
  • Saga (SAGA) 币是什么?模块化游戏公链的空投与潜力解读

    saga是一个专注于游戏领域的模块化layer 1协议,它通过独特的“chainlet”架构,让开发者能轻松启动专用的并行链,极大地降低了web3游戏开发的门槛。 Saga的核心技术与特色 1、其核心是“Chainlet”无限扩展架构,开发者可以按需启动独立的、可互操作的专用链,从而彻底摆脱网络拥堵…

    2025年12月9日
    000
  • 投资加密货币前,必须问自己的5个问题

    加密货币交易平台推荐: 欧易OKX: Binance币安: 火币Huobi: Gateio芝麻开门: 加密货币市场充满机遇,但也伴随着巨大的波动性。在您投入真金白银之前,进行深入的自我评估至关重要。这不仅能帮您规避不必要的风险,更能让您的投资决策建立在理性的基础上,而非一时冲动。 我真的了解加密货币…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信