本节详细介绍在嵌入式Linux设备树中指定中断的方法,以及在驱动代码中获取中断号的多种途径。内容涵盖中断控制器的描述属性、interrupt-parent与interrupts的使用、interrupt-map映射机制,并结合GIC和GPIO实例详解中断配置,最后介绍内核提供的各类API函数用于解析和获取中断资源。
一、设备树中断配置详解
1. 中断控制器的基本属性
2. 设备节点中断配置方式
3. interrupt-map复杂映射机制
二、设备树中断解析流程
三、驱动中获取中断号的API详解
1. Platform设备标准方法
2. 设备树直接解析方法
3. GPIO转中断方法
四、中断获取流程可视化
五、实际应用示例
完整的按键驱动中断处理
六、API函数对比总结
API函数 | 适用场景 | 优点 | 缺点 |
platform_get_irq() | Platform设备驱动(MMIO设备、SoC内置外设) | 最标准,支持ACPI和DT,自动处理资源 | 仅适用于platform_device |
irq_of_parse_and_map() | 直接从设备树节点解析(非platform设备) | 灵活,可用于任何设备树节点 | 不支持ACPI,需手动管理 |
of_irq_get() | I2C/SPI设备驱动,需要错误处理 | 返回负数错误码便于处理,适合总线设备 | 相比parse_and_map多一次函数调用 |
gpio_to_irq() | GPIO引脚作为中断源(传统GPIO编号) | 简单直接,兼容旧代码 | 需要先申请GPIO,使用全局GPIO编号 |
gpiod_to_irq() | GPIO引脚作为中断源(使用GPIO描述符) | 类型安全,推荐新代码使用,支持设备树 | 需要GPIO子系统支持 |






