static struct tasklet_struct xxx_tasklet;
static void xxx_tasklet_handle(unsigned long data)
{
printk("tasklet running...\n");
}
static irqreturn_t xxx_interrupt(int irq, void *dev_id)
{
// 调度 tasklet
tasklet_schedule(&xxx_tasklet);
return IRQ_HANDLED;
}
static int __init xxx_driver_init(void)
{
// 初始化一个 tasklet ,关联处理函数
tasklet_init(&xxx_tasklet, xxx_tasklet_handle, 0);
request_irq(xxx_irq, xxx_interrupt, IRQF_SHARED, xxx, xxx);
return 0;
}
static void __exit xxx_driver_exit(void)
{
tasklet_kill(&xxx_tasklet);
return ;
}
module_init(xxx_driver_init);
module_exit(xxx_driver_exit);
MODULE_LICENSE("GPL v2")