linux内核研究-4-软中断
来源:互联网 发布:工业无线传感器网络 编辑:程序博客网 时间:2024/06/05 21:04
linux内核研究-4-软中断
1,说在前面
1》此“软中断”非彼“软中断”,这里说的不是针对硬件中断的那个,而是中断处理流程的下半部分机制之一。
2》2.6内核有三种下半部机制:软中断,tasklet,work queue。
3》老的内核使用的BH,task queue,现在都已经不用了。
4》tasklet 需要软中断的帮助。
5》软中断不能抢占其它软中断,但是不同CPU上的可以同时执行。
6》软中断只能被中断抢占。
7》要用软中断,需要在内核编译前做一些事情,不能完全动态创建。
2,软中断工作原理和过程
1》内核里有一个32个成员的数组。
数组成员包含软中断处理函数指针,和处理函数的参数。在/kernel/softirq.c里面。
static struct softirq_action softirq_vec[32] _xx__xx。
(我们公司有套加密系统,从source insight里面不能直接copy,必须手输,所以就把后面的变量名称省掉了,见谅。),这个数组的成员定
义在interrupt.h里面:
struct softirq_action
{
void (*action)(struct softirq_action*);
void *data;
}
2》内核里面有个内核线程(叫:ksoftirqd)。
3,软中断工作流程
1》ksoftirqd循环检查32位数组。
2》发现某一位被标记,就执行它对应的软中断处理函数。
4,在驱动中如何使用软中断
1》请确认一定要用软中断(或许可以考虑tasklet,呵呵)。
2》在内核编译前,分配索引:
在linux/interrupt.h里面的232行有个枚举,在里面加入一行(比如叫:RILL_SOFTIRQ)。注意,不能简单的加到最后,要根据你想要的优先级
来加。想高点,就加到前面一点,反之,你懂的。
3》编译内核
4》在你的驱动里注册软中断处理函数
open_softirq(RILL_SOFTIRQ,rill_softirq_func,NULL);
5》在你的中断处理程序返回前触发软中断(加标记)
raise_softirq(RILL_SOFTIRQ);这个函数会先禁止中断,返回前恢复;
如果你知道中断已经禁止了就用下面这个函数:
raise_softirq_irqoff(RILL_SOFTIRQ);
- linux内核研究-4-软中断
- linux内核研究-3-中断
- Linux内核:中断、软中断、tasklet
- Linux内核:中断、软中断、tasklet
- Linux中断研究
- Linux中断研究
- linux中断--内核中断编程
- linux中断--内核中断编程
- Linux内核源代码情景分析-中断下半部(软中断)
- Linux 2.4.x内核软中断机制
- Linux 2.4.x内核软中断机制
- Linux 2.4.x内核软中断机制
- Linux 内核软中断(softirq)执行分析
- Linux 内核软中断(softirq)执行分析
- Linux 内核软中断(softirq)执行分析
- Linux 内核软中断(softirq)执行分析
- Linux 内核软中断(softirq)执行分析
- Linux 内核软中断(softirq)执行分析
- javascript中清空数组
- samba 服务安装及原理介绍
- 【操作系统】Linux性能监控——CPU、Memory、IO、Network
- Android--Handler总结
- Socket错误
- linux内核研究-4-软中断
- JS 内存溢出,调试工具
- popShow弹出层的使用(一)
- Android--EditText属性
- 一日一点RakNet(32)--RPC4插件
- ActiveX(COM)组件与JavaScript交互
- Office2003与2007 共存及设置默认打开方式
- 目前最科学、最健康的作息时间表(附人体24小时生物钟)!
- ListView中getView的原理+如何在ListView中放置多个item