红联Linux门户
Linux帮助

linux中断入口

发布时间:2006-08-28 10:17:03来源:红联作者:syncode
此文以linux2.6.12 for i386为准:
linux处理中断的部分的代码有点分散,我一个文件一个文件的找了一下,算是找到了大部分,作日记记录如下:
先是中断入口的问题.本版本内核并不是用宏展开的方式得到中断程序的入口地址,而是用到了gas汇编的一些功能,在arch/i386/kernel/entry.S中,有这样一段:
[code] .data
ENTRY(interrupt)
.text

vector=0
ENTRY(irq_entries_start)
.rept NR_IRQS
ALIGN
1: push $vertor-256
jmp common_interrupt
.data
.long 1b
.text
.vector=vector+1
.endr[/code]
这一段很重要,这一段经过汇编连接后,会分别在data段得到一个函数指针(viod *)interrupt[NR_IRQS](void);text段得到相应的处理代码。其中的
[code] .data
.long 1b[/code]
就是用来得到函数指针数组的。

在上一段提到的代码的后面,就是common_interrupt的代码,它保存cpu context,然后调用do_IRQ,do_IRQ就是C语言的函数了。里面就有很多具体的中断要处理的问题了。

还有一点,就是在初始化irq的时候,会把中断描述符表中中断处理函数的地址设为void(*)interrupt[i](void);这也是我记下这一段说明的原因。
其他的就和2.4版的差别不打了。
文章评论

共有 0 条评论