首先阐述下为什么内核要将中断分成上下半部
因为中断本身打断了正常的程序执行,中断中不能进行任务调度,所以中断需要快返回,但是某些操作必须在中断中执行。
如果内核需要执行一个硬件相关、时间敏感、不能被中断的操作,那么这些操作就应该放到上半部中,其他能够推迟的操作应该放到下半部中去,这样完成了中断中必须完成的操作,又能很好的进行调度。
看看内核对于下半部的支持
首先说以下如何添加自己的软中断程序
首先添加自己的软中断类型,值越低优先级越高
用open_softirq增加相对应的中断处理函数
用raise_softirq将自己的软件中断有效
之后内核在do_softirq中便能调用软件中断了
然后看看tasklet
通过以上3个方法来声明自己的tasklet
当然要编写自己的执行函数 void func(unsigned long arg);
通过以上两个函数,将自己的tasklet加入到调度中去
当然也有相应函数来取消自己的tasklet,这里不介绍了
接下来看看工作队列workqueue
通过以上方法能声明一个work
当然得自己编写执行函数
通过以上方法将work加入系统workquene
当然也可以创建自己的工作队列,然后将work加入自己的工作队列中
时间: 2024-10-11 13:41:48