[Linux外设驱动详解]6. 中断处理

6. 中断处理

概述

中断是硬件与操作系统内核通信的核心机制。当硬件设备需要 CPU 注意时,会通过中断信号线向 CPU 发送请求。Linux 内核采用分阶段处理策略来响应中断:

  • 上半部(Hard IRQ):在硬件中断上下文中执行,快速响应,禁止抢占
  • 下半部:在稍后执行,处理耗时操作,允许睡眠

中断请求

快速处理

触发下半部

硬件设备

CPU

上半部
Hard IRQ

中断控制器

下半部机制

软中断

Tasklet

工作队列


6.1 上半部 vs 下半部

6.1.1 为什么需要分阶段处理?

特性上半部下半部
执行上下文硬件中断上下文软中断/进程上下文
禁止抢占
允许睡眠部分允许(仅工作队列)
执行时间尽可能短可较长
响应速度最快稍慢

设计原则

  • 上半部只做必须立即完成的事情:读硬件寄存器、应答中断
  • 下半部处理耗时操作:数据处理、拷贝、与设备协议交互

6.1.2 软中断(Softirq)

软中断是下半部的基础机制,在内核编译时静态定义。软中断类型在 include/linux/interrupt.h:532-546 定义:

enum{HI_SOFTIRQ=0,// 高优先级软中断TIMER_SOFTIRQ,// 定时器软中断NET_TX_SOFTIRQ,// 网络发送软中断NET_RX_SOFTIRQ,// 网络接收软中断BLOCK_SOFTIRQ,// 块设备软中断IRQ_POLL_SOFTIRQ,// IRQ轮询软中断TASKLET_SOFTIRQ,// Tasklet软中断SCHED_SOFTIRQ,// 调度软中断HRTIMER_SOFTIRQ,// 高精度定时器软中断RCU_SOFTIRQ,// RCU软中断NR_SOFTIRQS};
软中断数据结构

每个 CPU 维护一个软中断向量表 include/linux/interrupt.h:565-568:

structsoftirq_action{void(*action)(structsoftirq_action*);};
软中断执行流程

核心处理函数在 kernel/softirq.c:260:

asmlinkage __visiblevoid__softirq_entry__do_softirq(void){structsoftirq_action*h;__u32 pending;pending=local_softirq_pending();// 获取待处理软中断位图h=softirq_vec;while((softirq_bit=ffs(pending))){h+=softirq_bit-1;h->action(h);// 调用软中断处理函数pending>>=softirq_bit;}}

执行时机

  1. 上半部退出时(如果in_interrupt()为 false)
  2. ksoftirqd内核线程被唤醒时
  3. 明确调用do_softirq()
软中断注册
// kernel/softirq.c:654-655open_softirq(TASKLET_SOFTIRQ,tasklet_action);open_softirq(HI_SOFTIRQ,tasklet_hi_action);

6.1.3 Tasklet

Tasklet 是基于软中断的动态下半部机制,主要特点:

  • 同一个 Tasklet同一时刻只能在一个 CPU 上运行
  • 不同 Tasklet可以并行在不同 CPU 上运行
  • 不能睡眠
Tasklet 数据结构

定义在 include/linux/interrupt.h:620-631:

structtasklet_struct{structtasklet_struct*next;// 链表下一节点unsignedlongstate;// 状态(0/TASKLET_STATE_SCHED)atomic_tcount;// 引用计数(0=使能,非0=禁用)bool use_callback;// 是否使用新式callback APIunion{void(*func)(unsignedlongdata);// 旧式处理函数void(*callback)(structtasklet_struct*t);// 新式处理函数};unsignedlongdata;};
Tasklet 使用示例
// 定义和初始化DECLARE_TASKLET(my_tasklet,my_tasklet_handler);// 或者动态初始化structtasklet_structmy_tasklet;tasklet_setup(my_tasklet,my_tasklet_callback);// 调度 Tasklettasklet_schedule(&my_tasklet);// 处理函数voidmy_tasklet_callback(structtasklet_struct*t){// 这里不能睡眠printk("Tasklet running on CPU %d\n",smp_processor_id());}
Tasklet 执行流程

kernel/softirq.c:548-592:

staticvoidtasklet_action_common(structsoftirq_action*a,structtasklet_head*tl_head,unsignedintsoftirq_nr){structtasklet_struct*list;// 取出所有待处理的 taskletlist=tl_head->head;tl_head->head=NULL;while(list){structtasklet_struct*t=list;list=list->next;if(tasklet_trylock(t)){// 尝试获取锁(防止多CPU并发)if(!atomic_read(&t->count)){// 检查是否被禁用t->callback(t);// 执行 tasklettasklet_unlock(t);continue;}tasklet_unlock(t);}// 如果正在其他CPU运行,重新调度t->next=NULL;*tl_head->tail=t;__raise_softirq_irqoff(softirq_nr);}}

6.1.4 工作队列(Workqueue)

工作队列是最灵活的下半部机制,特点:

  • 内核进程上下文中执行
  • 可以睡眠(调用msleep()、等待信号量等)
  • 可以延迟执行
工作队列数据结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1141188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

导师不会告诉你的6款AI论文神器,一键生成超长篇!

90%的学生都不知道,那些学术大佬和导师们早已在用这些“黑科技”工具悄悄拉开差距。你以为他们的效率全靠天赋?错了,真正的秘密武器,今天就为你一一揭秘。 “改到第8稿了,导师还是不满意……” “文献综述根本看不完&a…

DOL-CHS-MODS中文美化包:从零开始打造完美游戏体验

DOL-CHS-MODS中文美化包:从零开始打造完美游戏体验 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 还在为Degrees of Lewdity的英文界面而烦恼吗?DOL-CHS-MODS整合包将彻底解…

基于微信小程序的图书阅读系统【源码+文档+调试】

🔥🔥作者: 米罗老师 🔥🔥个人简介:混迹java圈十余年,精通Java、小程序、数据库等。 🔥🔥各类成品Java毕设 。javaweb,ssm,springboot等项目&#…

【电动机】基于matlab液压伺服电动机的状态空间设计与仿真【含Matlab源码 14900期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…

AO3镜像站技术指南:突破访问限制的完整解决方案

AO3镜像站技术指南:突破访问限制的完整解决方案 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site AO3镜像站项目是一个专门为解决AO3作品库访问限制而设计的开源技术方案。该项目通过创新的镜像技术&#xf…

[Linux外设驱动详解]7. 内存管理与 I/O 访问

7. 内存管理与 I/O 访问 基于 Linux 内核源码分析 | 硬件平台:瑞芯微 RK3588 (ARM64) 目录 7.1 ioremap / iounmap 7.2 readl/writel 等寄存器访问宏 7.3 DMA 缓冲区分配 7.4 内存屏障简介 7.1 ioremap / iounmap 7.1.1 概述 在 Linux 驱动开发中,硬件设备的寄存器通常位于…

【光学】基于matlab FLASH核进行投影k空间MRI采集的二维布洛赫模拟【含Matlab源码 14902期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…

RPG Maker资源提取终极秘籍:轻松解锁游戏素材宝库

RPG Maker资源提取终极秘籍:轻松解锁游戏素材宝库 【免费下载链接】RPG-Maker-MV-Decrypter You can decrypt RPG-Maker-MV Resource Files with this project ~ If you dont wanna download it, you can use the Script on my HP: 项目地址: https://gitcode.com…

ReactPage页面编辑器:从内容创作到专业演示文稿的完整指南

ReactPage页面编辑器:从内容创作到专业演示文稿的完整指南 【免费下载链接】react-page 项目地址: https://gitcode.com/gh_mirrors/ed/editor ReactPage是一个功能强大的React页面编辑器,它让开发者能够轻松创建复杂的页面内容并转换为专业演示…

3.42 Pulp工具实战:Python线性规划求解器,5分钟上手运筹优化

3.42 Pulp工具实战:Python线性规划求解器,5分钟上手运筹优化 引言 PuLP是Python的线性规划求解器,简单易用。本文将演示如何使用PuLP解决优化问题。 一、PuLP安装 1.1 安装方法 # PuLP安装 # pip install pulp print("安装命令: pip install pulp")二、基础使…

小米运动智能刷步神器:轻松同步微信支付宝步数全攻略

小米运动智能刷步神器:轻松同步微信支付宝步数全攻略 【免费下载链接】mimotion 小米运动刷步数(微信支付宝)支持邮箱登录 项目地址: https://gitcode.com/gh_mirrors/mimo/mimotion 还在为每天运动步数太少而发愁吗?想不想…

【光学】FLASH核进行投影k空间MRI采集的二维布洛赫模拟【含Matlab源码 14902期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…

[Linux外设驱动详解]8. GPIO子系统

8. GPIO子系统 8.1 概述 GPIO(General Purpose Input/Output,通用输入输出)是嵌入式系统中最基础、最常用的外设接口之一。Linux 内核通过 GPIO 子系统为驱动开发者提供了一套统一的 API,屏蔽了不同 SoC 硬件实现的差异。 什么是 GPIO? 简单来说,GPIO 就是芯片引脚的软…

【电动机】液压伺服电动机的状态空间设计与仿真【含Matlab源码 14900期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…

工作流自动化方法论:从业务流程优化到零代码配置实战

工作流自动化方法论:从业务流程优化到零代码配置实战 【免费下载链接】n8n n8n 是一个工作流自动化平台,它结合了代码的灵活性和无代码的高效性。支持 400 集成、原生 AI 功能以及公平开源许可,n8n 能让你在完全掌控数据和部署的前提下&#…

导师严选8个论文写作工具,一键生成论文工具推荐!

导师严选8个论文写作工具,一键生成论文工具推荐! AI 工具如何助力论文写作? 在研究生阶段,论文写作是一项既重要又充满挑战的任务。随着人工智能技术的不断发展,越来越多的 AI 工具被应用于学术写作中,帮助…

【API渗透】crAPI 靶场的环境搭建与漏洞复现详解

目录 环境搭建 漏洞复现 挑战1:找到泄露其它用户敏感信息的API接口 挑战2:找到泄露视频内部属性的API接口 挑战3:访问其它用户车辆的详细信息 挑战4:访问其它用户的机械报告 挑战5:重置其它用户的密码 挑战6:删除另一个用户的视频 挑战7:免费获得一件物品 挑战…

2026必备!8个AI论文写作软件,专科生搞定毕业论文+格式规范!

2026必备!8个AI论文写作软件,专科生搞定毕业论文格式规范! AI工具助力论文写作,专科生也能轻松应对 随着人工智能技术的不断进步,越来越多的AI工具开始进入学术领域,为学生提供高效、便捷的写作支持。尤其是…

3.38 工业缺陷检测实战:物体表面缺陷检测,从图像处理到深度学习

3.38 工业缺陷检测实战:物体表面缺陷检测,从图像处理到深度学习 引言 工业缺陷检测是视觉算法的重要应用,本文通过实战案例演示从图像处理到深度学习的完整流程。 一、缺陷检测概述 1.1 任务定义 # 缺陷检测任务 def defect_detection_task():"""缺陷检…

2026 中专大数据管理与应用专业证书含金量怎么样?

在数字化浪潮席卷各行各业的2026年,“大数据”已从一个前沿概念,沉淀为驱动产业升级的日常燃料。对于即将毕业或刚刚步入职场的中专大数据管理与应用专业学子而言,你们正站在一个充满机遇的十字路口:专业背景赋予了你们进入赛道的…