设备树GPIO中断怎么配置?驱动如何获取IRQ并注册中断服务?-嵌入式Linux面试

浏览量:9
时间: 2026-11-09 20:44:58

嵌入式Linux / 工程师面试高频题 / 

传感器的INT引脚已经连接到SoC的GPIO,但驱动一直收不到中断。面试官问你设备树怎么写、驱动怎么申请IRQ,实际考查的是设备树中断描述、GPIO控制器中断能力和Linux内核GPIO descriptor接口。

面试先说结论

设备树通常通过interrupt-parent和interrupts描述设备的中断控制器及中断号/触发类型;如果驱动先通过*-gpios属性获取GPIO描述符,也可以在GPIO配置为输入后使用gpiod_to_irq()转换为IRQ,再通过devm_request_threaded_irq()等接口注册中断处理。具体写法必须匹配SoC的GPIO控制器binding和芯片数据手册,不能把GPIO序号直接当成Linux全局IRQ号。

一、核心原理与工程判断

嵌入式Linux设备树GPIO控制器节点代码,包含compatible、reg、gpio-controller和interrupts相关配置

设备树中interrupts和*-gpios不是一回事

*-gpios属性用于描述设备使用的GPIO线路,例如复位脚、使能脚或状态输入脚;interrupts属性用于描述设备的中断资源,包括中断控制器、硬件中断号和触发类型。某些GPIO控制器本身也提供中断功能,因此GPIO引脚可以作为中断源,但设备树写法必须符合对应控制器的binding。

interrupt-parent和interrupts如何配合

interrupt-parent用于指定该设备的中断父控制器,interrupts则按照该控制器的#interrupt-cells格式填写中断信息。不同SoC的GPIO控制器可能需要填写GPIO线号、触发类型等字段,也可能使用interrupts-extended显式指定父控制器。不能把示例中的数字直接照搬到其他芯片。

驱动如何获取IRQ

如果平台设备的设备树已经将中断资源映射为platform IRQ,可以通过platform_get_irq()获取;如果驱动是通过GPIO descriptor获取中断脚,则需要确认该GPIO配置为输入,再调用gpiod_to_irq()转换为IRQ号。新驱动优先使用descriptor接口,避免继续依赖已不推荐的全局GPIO整数编号。

中断服务函数要不要使用线程化中断

硬中断上半部应尽量短,不要执行可能睡眠的I2C/SPI访问、长时间延时或复杂处理。若传感器中断后需要通过I2C读取状态寄存器,可使用devm_request_threaded_irq()注册线程化处理函数,在合适的上下文中完成耗时操作,并根据芯片要求清除中断源。

二、实际排查与设计步骤

  1. 先查SoC设备树binding和原理图,确认INT引脚对应哪个GPIO控制器、哪个引脚号,以及中断触发方式是上升沿、下降沿还是电平触发。

  2. 在设备树中按芯片binding填写interrupt-parent、interrupts或interrupts-extended;如果还需要普通GPIO控制属性,再单独配置对应的*-gpios。

  3. 驱动中通过platform_get_irq()或gpiod_to_irq()获取IRQ,检查返回值是否为负错误码,并确认GPIO已设置为输入。

  4. 使用devm_request_threaded_irq()或适合的IRQ接口注册中断,测试中断触发、屏蔽/清除、重复进入和系统休眠唤醒行为。

三、面试中的常见失分点

误区1:把设备树中的GPIO编号直接当成Linux IRQ编号使用,忽略GPIO控制器的IRQ domain映射。

误区2:在硬中断上半部直接调用可能睡眠的I2C/SPI接口,导致内核告警、死锁或系统异常。

四、面试官可能继续追问

面试追问:设备树里配置了下降沿中断,但驱动始终收不到中断,你会从哪些方向排查?

先用示波器确认INT引脚确实产生下降沿,再检查引脚复用、上下拉、电平有效方式、interrupt-parent和触发类型是否与硬件一致;随后检查GPIO控制器是否启用IRQ功能、驱动是否成功获取IRQ、申请中断是否返回错误,以及中断源是否需要先清状态才能再次触发。


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。侵权投诉
相关推荐HOT
PCB电源完整性怎么仿真?PDN阻抗分析与去耦设计核心考点

PCB仿真中等偏难技术面试电源完整性PDN阻抗本文概述电源完整性是PCB仿真的核心方向之一。PDN阻抗分析的目标是使电源分配网络在芯片工作的全频段内阻抗低于目标... 详情>>

2026-08-26 17:28:36
单片机进入低功耗后无法唤醒,嵌入式面试应该怎样排查?

题库分类:嵌入式单片机适合经验:0—5年难度:中高级题型:低功耗场景题 + 系统排查题面试题单片机进入低功耗模式后偶发无法唤醒,或者能唤醒但串口、定时器不再工作... 详情>>

2026-07-31 16:00:42
LLC谐振电源怎么设计?谐振腔怎么算?软开关和频率控制怎么理解?电源面试

一句话答案LLC 是谐振型隔离电源,由谐振电感 Lr、谐振电容 Cr、励磁电感 Lm 组成谐振腔;通过改变开关频率调节输出电压,谐振点附近效率最高;原边 MOS... 详情>>

2026-10-07 10:02:27
STM32定时器高级应用怎么做?嵌入式面试从PWM输出讲到编码器接口

嵌入式单片机中级技术基础题本文概述STM32定时器是外设中功能最丰富的模块之一,除了基本定时中断,还支持PWM输出、输入捕获、输出比较、单脉冲模式、编码器接口、... 详情>>

2026-08-31 14:33:46
音频功放电路怎么设计?D类与AB类功放怎么选?硬件工程师面试

硬件设计中高级技术基础题本文概述音频功放是电子产品(音箱、耳机、车载、电视)的核心电路,D类与AB类的选型也是硬件面试的高频题。面试官想听的不是“D类效率高”,... 详情>>

2026-09-10 21:39:36
开班信息