int request_irq内容的C语言demo
时间: 2023-12-11 10:05:08 浏览: 72
下面是一个简单的 C 语言 demo,演示如何使用 `request_irq()` 函数注册中断处理函数:
```c
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/interrupt.h>
static irqreturn_t my_irq_handler(int irq, void *dev)
{
// 中断处理函数的具体实现
printk(KERN_INFO "my_irq_handler called\n");
return IRQ_HANDLED;
}
static int __init my_init(void)
{
int irq = 10; // 假设要注册的中断号是 10
int ret;
// 注册中断处理函数
ret = request_irq(irq, my_irq_handler, IRQF_SHARED, "my_irq", NULL);
if (ret) {
printk(KERN_ERR "request_irq failed\n");
return ret;
}
printk(KERN_INFO "my_init called\n");
return 0;
}
static void __exit my_exit(void)
{
int irq = 10; // 假设要注销的中断号是 10
// 注销中断处理函数
free_irq(irq, NULL);
printk(KERN_INFO "my_exit called\n");
}
module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");
```
这个 demo 中,首先定义了一个中断处理函数 `my_irq_handler()`,当中断发生时,会调用该函数进行处理。然后,在 `my_init()` 函数中,调用 `request_irq()` 函数注册中断处理函数,将中断号设为 10,中断处理函数设为 `my_irq_handler()`,中断处理标志设为 IRQF_SHARED,中断处理函数的名称设为 "my_irq",设备指针设为 NULL。如果注册成功,就会输出 "my_init called"。如果注册失败,就会输出 "request_irq failed"。在 `my_exit()` 函数中,调用 `free_irq()` 函数注销中断处理函数,将中断号设为 10,设备指针设为 NULL。最后,输出 "my_exit called"。
阅读全文