关于request_irq第一个参数irq number的问题
本文是原「蜗窝讨论区」的历史存档(2016-08-05),来自版块「Linux kernel技术问答」,共 2 帖。讨论区已停止服务,此处仅供查阅。
大家好, 这里我有一个关于中断号的问题, 描述如下: 1. 我们知道linux因为要支持多个中断控制器引入了irq domain的概念, 所以irq number ≠ HW interrupt ID 2. 在一个典型的驱动程序中, 基本套路是 使用irq number = platform_get_irq(,来获取中断号, 当内核支持设备树时, 这个irq number是映射过的。 platform_get_irq(->of_irq_get(->irq_create_of_mapping(.
我的问题是, 有一个"non-standard"的驱动程序,没有使用platform设备模型, 1. HW interrupt ID 已知,静态定义在程序中 2. 因为不能使用platform_get_irq(来获取映射后的中断, 要使用request_irq(注册中断之前,如何申请一个映射的irq number?
看来你不是不打算使用device tree了,呵呵~~~我能想到两个方案: 1、使用静态定义的mapping,也就是在系统初始化的时候就确定irq domain中指定的HW interrupt ID(你静态定义在程序的那个)和irq number的对应关系,这样,你的驱动程序不需要省钱irq number,直接使用就OK了。换句话说:其实你不必静态定义HW interrupt ID,你需要静态定义该驱动的IRQ number。
2、在驱动程序中调用irq子系统的接口来完成(1)申请一个free的irq number (2)建立该irq domain上指定HW interrupt ID(你静态定义在程序的那个)和你驱动程序申请的那个irq number的对应关系。
