0

0

Linux系统驱动之两类中断控制器处理流程_链式和层级

看不見的法師

看不見的法師

发布时间:2025-06-26 10:40:02

|

760人浏览过

|

来源于php中文网

原创

资料下载

无法通过浏览器直接访问coding,必须使用git工具进行下载:

代码语言:javascript 运行次数:0

运行 复制 ```javascript git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git ```

视频观看

您可以访问百问网,观看有关驱动程序的全套视频。

两类中断控制器处理流程:链式和层级

资料下载 视频观看

  1. 下级中断控制器的类别 1.1 链式中断控制器(chained) 1.2 层级中断控制器(hierarchy)

  2. 链式中断控制器的处理流程

  3. 层级中断控制器的处理流程

  4. 处理流程对比

在这里插入图片描述

参考资料:

  • Linux kernel的中断子系统之(七):GIC代码分析
  • Linux 4.9.88内核源码 Linux-4.9.88\drivers\gpio\gpio-mxc.c
  • Linux 4.9.88内核源码 Linux-4.9.88\arch\arm\boot\dts\imx6ull.dtsi
  • Linux 5.4内核源码 Linux-5.4\drivers\pinctrl\stm32\pinctrl-stm32mp157.c
  • Linux 5.4内核源码 Linux-5.4\drivers\irqchip\irq-stm32-exti.c
  • Linux 5.4内核源码 Linux-5.4\arch\arm\boot\dts\stm32mp151.dtsi
  1. 下级中断控制器的类别

在后续课程中,我们将GIC之下的中断控制器分为两类:链式(chained)和层级(hierarchy)。这种分类没有官方定义,是我们根据代码概括出来的(Linux内核本来就缺乏文档)。

Linux系统驱动之两类中断控制器处理流程_链式和层级

1.1 链式中断控制器(chained)

上图中,左边的"chained intc"就是链式中断控制器。当它底下的4个中断触发时,都会导致GIC的33号中断被触发。处理中断时,需要分辨是谁触发了GIC 33号中断,这需要读取"chained intc"中的寄存器。

1.2 层级中断控制器(hierarchy)

无限画
无限画

千库网旗下AI绘画创作平台

下载

上图中,右边的"hierarchy intc"就是层级中断控制器。它底下的4个中断与GIC中的4个中断一一对应。处理GIC 100~103号中断时,不需要读取"hierarchy intc"的寄存器来分辨是谁触发了中断。

  1. 链式中断控制器的处理流程

下图中:

  • handleA、irq_dataA由GIC驱动提供
  • handleB、irq_dataB由GPIO驱动提供
  • handleC也是GPIO驱动提供

Linux系统驱动之两类中断控制器处理流程_链式和层级

假设GPIO模块下有4个引脚,都可以产生中断,都连接到GIC的33号中断。GPIO就是一个链式中断控制器,它底下有4个中断。对于GPIO模块中0~3这四个hwirq,可以一下子分配4个irq_desc(legacy,老方法),也可以用到时再分配(linear,新方法)。假设这4个irq_desc的序号为100~103,在GPIO domain中记录(0,100) (1,101)(2,102) (3,103)。

对于KEY,注册中断时就是:request_irq(102, ...)

按下KEY时:

  • 程序从GIC中读取寄存器知道发生了33号中断,通过GIC irq_domain可以知道virq为17。
  • 处理virq 17号中断:调用irq_desc[17].handle_irq,即handleB。
  • mask/ack中断:调用irq_desc[17].irq_data->irq_chip的函数,即irq_dataA。
  • 细分中断源、处理:读取GPIO寄存器,确定是GPIO里2号引脚发生中断。通过GPIO irq_domain可以知道virq为102。
  • 处理virq 102号中断:调用irq_desc[102].handle_irq,即handleC。
  • mask/ack中断:调用irq_desc[102].irq_data->irq_chip的函数。
  • 调用irq_desc[102].action链表中用户注册的函数。
  • unmask中断:调用irq_desc[102].irq_data->irq_chip的函数。
  • unmask中断:调用irq_desc[17].irq_data->irq_chip的函数。
  1. 层级中断控制器的处理流程

下图中:

  • handleA、irq_dataA由GIC驱动提供
  • irq_dataB由GPIO驱动提供,不需要handleB

Linux系统驱动之两类中断控制器处理流程_链式和层级

假设GPIO模块下有4个引脚,都可以产生中断,分别链接到GIC的100~103号中断。GPIO就是一个层级中断控制器。对于GPIO模块中0~3这四个hwirq,分配四个irq_desc,用到时再分配。假设这4个irq_desc的序号为234~237。在GIC domain中记录(100,234) (101,235)(102,236) (103,237),在GPIO domain中记录(0,234) (1,235)(2,236) (3,237)。

对于KEY,注册中断时就是:request_irq(236, ...)

按下KEY时:

  • 程序从GIC中读取寄存器知道发生了102号中断,通过GIC irq_domain可以知道virq为236。
  • 处理virq 236号中断:调用irq_desc[236].handle_irq,即handleA。
  • mask/ack中断:调用irq_desc[236].irq_data->irq_chip的函数,即irq_dataB。它会调用父级irq_dataA->irq_chip的函数。
  • 调用irq_desc[236].action链表中用户注册的函数。
  • unmask中断:调用irq_desc[236].irq_data->irq_chip的函数,即irq_dataB。它会调用父级irq_dataA->irq_chip的函数。
  1. 处理流程对比

Linux系统驱动之两类中断控制器处理流程_链式和层级

相关文章

驱动精灵
驱动精灵

驱动精灵基于驱动之家十余年的专业数据积累,驱动支持度高,已经为数亿用户解决了各种电脑驱动问题、系统故障,是目前有效的驱动软件,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

979

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

582

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

275

2023.07.24

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

568

2024.04.09

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

533

2024.04.09

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2915

2024.08.16

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1564

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

716

2023.06.29

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.6万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号