版权声明:本文为博主原创文章,未经博主允许不得转载。
https://blog.csdn.net/huangweiqing80/article/details/83276153
中断下半部使用tasklet:
手把手教你写Linux设备驱动—中断(二)–tasklet实现(基于友善之臂4412开发板)
其实,tasklet的实现就是基于软中断的。
软中断初始化函数softirq_init()中注册了两个tasklet软中断。
void __init softirq_init(void)
{
......
//此处注册两个软中断
open_softirq(TASKLET_SOFTIRQ, tasklet_action);
open_softirq(HI_SOFTIRQ, tasklet_hi_action);
......
}
其处理函数分别为 tasklet_action()和tasklet_hi_action()。
tasklet_action()和tasklet_hi_action()的实现其实就是:循环遍历获得链表上的每一个待处理的tasklet,执行t->func(t->data),即tasklet_init设置的处理函数。这样就相当于tasklet_init中设置的处理函数其实就是软中断的处理函数
tasklet_schedule函数其实也就是调用raise_softirq_irqoff触发软中断。
软中断触发之后便会开始执行软中断处理函数t->func(t->data)。
tasklet的详细解析参考
把握linux内核设计思想(四):下半部机制之tasklet