Linux之IRQ domain

本文介绍了Linux中IRQDomain的概念及其作用,IRQDomain用于描述中断控制器管理的中断源,通过创建IRQDomain能够实现对中断响应的分离处理,提高代码的统一性和设备驱动的简洁性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

Linux使用IRQ domain来描述一个中断控制器(IRQ Controller)所管理的中断源。换句话说,每个中断控制器都有自己的domain。我们可以将IRQ Domain看作是IRQ Controller的软件抽象。

这里所说的“中断控制器”,不仅指硬件上实际存在的中断控制器,也可以是一个“虚拟”的中断控制器。例如,假设我们有一块CPU,它有多个GPIO Pin可以作为外部中断源使用(事实上大多数嵌入式CPU都有这样的GPIO)。我们还假定所有的GPIO中断都复用到该CPU的同一个中断向量。在这样的情况下,这多个GPIO中断就可以抽象成一个虚拟的中断控制器,它连接到CPU的某个中断向量上。

这样做的好处在于,可以将“对中断控制器的中断响应”和“对产生中断的外部设备的中断响应”分离开来。我们还是看一个例子,假定我们有若干个GPIO,分别接了不同外设(如按键、外部以太网控制器等),当这些外设产生中断的时候,CPU内部的GPIO控制器会置位相应的中断标志位,并向CPU提交中断请求。这样,对每一个外设中断,我们实际上要进行两级中断服务:第一级中断服务判断是哪个GPIO产生了中断,并需要清除GPIO控制器内部某个寄存器中的某个标志位;第二级中断服务才是服务产生中断的那个外设的。显然,第一级中断服务代码对每个产生GPIO中断的外设是类似的。有了IRQ Domain的帮助,第一级中断服务代码就可以统一,设备驱动程序只需要关心第二级中断服务就可以了。

IRQ Domain的创建

有两个函数可以用来创建IRQ Domain:irq_domain_add_linear和irq_domain_add_tree。对于大多数情况,前一个函数就够用了:它在中断源和irq_desc之间建立线性映射。如果硬件提供的可用中断源较多(>256),而实际用到的很少,就可以用后者,避免无用的表项。


Linux 5.1版本中,irq(中断请求)模块的相关代码可以在以下文件中找到:/kernel/irq/irqdomain.c和/kernel/irq/debugfs.c。 具体来说,在系统启动到board文件时,会调用init_machine函数,接着调用of_platform_populate()接口,加载平台总线和平台设备。这一过程涉及到的函数调用关系如下: of_platform_default_populate_init ---> of_platform_default_populate ---> of_platform_populate ---> of_platform_bus_create ---> of_platform_device_create_pdata ---> of_device_alloc ---> of_irq_to_resource_table ---> of_irq_to_resource ---> of_irq_get ---> of_irq_parse_one ---> irq_create_of_mapping ---> irq_create_fwspec_mapping ---> irq_domain_translate //解析参数 ---> d->ops->translate (gic_irq_domain_translate) ---> d->ops->xlate ---> irq_domain_alloc_irqs ---> gic_irq_domain_alloc //执行软硬件的映射,并且根据中断类型设置struct irq_desc->handle_irq处理函数。 在配置中启用了CONFIG_IRQ_DOMAIN_DEBUG和CONFIG_GENERIC_IRQ_DEBUGFS后,可以通过/sys/kernel/debug/irq_domain_mapping,/sys/kernel/irq/irqs,/sys/kernel/irq/domains和/proc/irq等路径下的文件来查看irq的调试信息。这些路径下的virq_debug_show和irq_debug_show函数可以展示调试信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [linux IRQ Management(四)- IRQ Domain](https://blog.youkuaiyun.com/weixin_41028621/article/details/101448227)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值