中断是当前计算机系统的基础功能,也是系统响应外设事件的必备桥梁。不同的架构对中断控制器有不同的设计理念,本文针对ARM公司提供的通用中断控制器(GIC,Generic Interrupt Controller)介绍在linux系统中的硬件中断号与软件中断号的映射过程。
首先,我们先来理解一下硬件中断号和软件中断号。
IC 分配的中断号范围
为什么要进行中断映射呢?简单来讲,软件可以不需要关注该中断在硬件上是哪个中断来源。简单的SOC内部对中断的管理也比较简单,通常会有一个全局的中断状态寄存器来记录外设中断,这样直接将硬件中断号线性映射到软件中断号即可。但是随着芯片技术的发展,SOC越来越复杂,通常内部会有多个中断控制器(比如GIC interrupt controller, GPIO interrupt controller), 每一个中断控制器对应多个中断号,而硬件中断号在不同的中断控制器上是会重复编码, 这时仅仅用硬中断号已经不能唯一标识一个外设中断。尤其在多个中断控制器级联的情况下,会变得更加复杂。这样对软件编程来讲极不友好,作为软件工程师,我们更愿意集中精力关注软件层面的内容。
接下来,我们看看Linux系统中断映射过程涉及到的数据结构,数据结构详细信息请参看Linux内核源码。
□ struct irq_desc,中断描述符,每个irq都会在系统中分配一个该数据结构,用于描述该irq的相关信息,包含了irqaction 。
□struct irq_domain/struct irq_chip, 是对中断控制器的软件抽象。
irq_domain 侧重于对级联关系的描述,以及该中断控制器对某个中断响应的描述在struct irq_domain_ops中进行组织。irq_domain中的linear_revmap[] 和 revmap_tree 用于该domain中hwirq的map。
irq_chip 侧重对该中断控制器响应中断过程的描述。
□struct irq_data, 是中断映射的关键数据结构,映射过程这要是填充该数据结构中的irq与hwirq。irq 为软件系统分配的虚拟中断号,hwirq为该domain分配的硬件中断号。
Linux系统中断映射过程涉及到的数据结构间的关系如下:
映射过程大致分为如下几个过程:
1 . 系统维护全局allocated_irqs
2 . 中断控制器的初始化
3 . 软件中断号的获取与映射
4 . 硬件中断号的获取与映射
在开了CONFIG_SPARSE_IRQ的系统中,系统中维护的全局allocated_irqs有NR_IRQS + 8196 位,每一位代表一个软件中断号。在virq的申请过程中,既可以单个中断号申请,也可以几个中断号一起申请。在申请过程中,从allocated_irqs的低位到高位查询第一个连续N个空闲的位作为软件中断号。
系统中的allocated_irqs 定义如下:
中断控制器通过IRQCHIP_DECLARE 宏注册到__irqchip_of_table,系统开机初始化阶段 start_kernel() => init_IRQ()=> irqchip_init 调度到注册的gic_of_init() 对GIC进行初始化。
Gic_of_init中注册domain相关的处理函数,其中gic_irq_domain_translate()将DTS中解析的中断信息翻译得到HWirq。通过irq_domain_create_tree() 申请一个domain内存,赋值后加入到全局的 irq_domain_list中。同时,设置中断处理入口函数。
kernel_init() => kernel_init_freeable() => do_pre_smp_initcalls()=> do_one_initcall() => arm64_device_init() => of_platform_populate()=> of_platform_bus_create() => of_platform_device_create_pdata() =>of_device_alloc()
Of_device_alloc()中,想通过of_irq_count() 从dts node中计算出该node中的irq 数量。然后对应每一个irq 调用of_irq_to_resource() => of_irq_get() 获取软件中断号。of_irq_get() 调用of_irq_parse_one() 从dts中收集该中断的相关信息如触发方式,中断号,中断类型等信息并记录在oirq结构体中。然后调用irq_create_of_mapping()进行中断映射并返回软件中断号。
irq_create_of_mapping() => irq_create_fwspec_mapping()通过irq_domain_translate()调用 gic_of_init()过程中注册的gic_irq_domain_translate() 进行翻译得到hwirq。然后调用irq_find_mapping() 尝试通过domain->revmap_tree 获取irq_data,从而后去irq。如果获取到irq说明该中断已完成映射,无需再进行下去。如果没有获取到irq,说明该中断没有进行过映射,继续往下。irq_create_mapping()中先通过bitmap_find_next_zero_area() 从allocated_irqs中找到第一个空闲位 start作为软件中断号。然后申请一个中断描述符irq_desc,完成相关赋值后,将软件中断号作为键值把irq_desc 加入到irq_desc_tree 基树上。此后,
就可以通过irq从irq_desc_tree 基树上快速获取对应的irq_desc,从而获取其他相关信息。
irq_create_fwspec_mapping()先调用irq_domain_translate()获取到硬件中断号,由于预留了SGI,PPI的中断号,这里需要加上对应的中断号偏移。然后在irq_domain_associate()中通过给该irq_data->hwirq赋值为获取到的硬件中断号,同时在irq_domain_set_mapping()中进行映射建立起hwirq与irq_data之间的联系。
irq_domain_set_mapping()中的映射包含两个部分,一是在该控制器支持一定的线性映射前提下,当hwirq
通过以上操作,可以以virq=>从irq_desc_tree中获取该irq的中断描述符结构体desc=> 再从desc中获取irq_data=> 进而获取hwirq;也可以通过hwirq=>从该domain的revmap_tree中获取对应的irq_data=> 从而获取 data->irq。
本文大体讲诉了linux kernel中断映射的解析与映射过程,并没有对具体的代码展开详细的讲解。读者可以根据梳理的框架进行代码详情的研究。
参考文档:
1. Kernel-5.10源码
https://www.kernel.org/pub/
2. 《奔跑吧linux内核》--张天飞
本文由哈喽比特于2年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/WBFX-yrpLrxGfT9d52yr6Q
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。