devm_request_irq各个参数
时间: 2023-07-10 19:19:21 浏览: 239
`devm_request_irq` 函数的参数如下:
```c
int devm_request_irq(struct device *dev, unsigned int irq,
irq_handler_t handler, unsigned long flags,
const char *name, void *dev_id);
```
- `dev`:指向设备对象的指针;
- `irq`:中断号;
- `handler`:中断处理函数;
- `flags`:中断标志,用于指定中断触发模式;
- `name`:中断名称,用于方便调试;
- `dev_id`:设备标识符,通常是设备结构体或设备私有数据的指针。
其中,`flags` 参数可以是以下值的按位或:
- `IRQF_SHARED`:允许多个设备共享同一个中断号;
- `IRQF_TRIGGER_NONE`:禁用中断触发;
- `IRQF_TRIGGER_RISING`:上升沿触发;
- `IRQF_TRIGGER_FALLING`:下降沿触发;
- `IRQF_TRIGGER_HIGH`:高电平触发;
- `IRQF_TRIGGER_LOW`:低电平触发;
- `IRQF_TRIGGER_MASK`:用于屏蔽触发模式的其他标志位。
`name` 参数可以为 NULL,此时中断名称将自动分配。`dev_id` 参数通常可以为设备结构体或设备私有数据的指针,用于在中断处理函数中访问设备的信息。
相关问题
devm_request_irq 返回值
devm_request_irq 是 Linux 内核中的一个函数,用于请求分配一个中断,并将中断处理函数与之关联。它的返回值表示请求中断是否成功。
devm_request_irq 的返回值有以下几种可能:
1. 成功:返回值为 0,表示成功地请求分配了中断,并成功地将中断处理函数与之关联。
2. 失败:返回一个负数,表示请求分配中断失败。常见的失败原因包括中断号无效、中断处理函数无效、中断请求失败等。
3. EPROBE_DEFER:返回值为 -EPROBE_DEFER,表示请求被推迟。这通常发生在设备驱动程序初始化过程中,当设备的资源还没有完全准备好时。
需要注意的是,devm_request_irq 是 devm 版本的函数,它会在设备被卸载时自动释放所分配的中断资源,因此不需要手动调用 irq_free 函数来释放中断。
devm_request_threaded_irq参数
devm_request_threaded_irq是Linux设备驱动中的一个函数,用于请求中断处理程序(IRQ)并将其与线程绑定。它的参数包括:
1. dev:设备结构体指针,表示请求中断的设备。
2. irq:中断号。
3. irq_handler:中断处理程序的函数指针。
4. thread_fn:线程函数指针,用于处理中断请求。
5. flags:中断标志。
6. name:中断名称。
7. dev_id:中断处理程序的私有数据。
该函数的作用是在设备驱动中注册一个中断处理程序,并且将其与一个线程绑定,以便在中断发生时可以异步地处理中断请求。它通常用于需要长时间处理中断请求的设备,比如网络设备或者嵌入式系统中的实时控制设备。