|
发表于 2005-3-7 19:16:45
|
显示全部楼层
1,看arch\i386\kernel\irq.c函数void init_IRQ(void)初始化IDT中的中断项,全局函数指针数组
static void (*interrupt[NR_IRQS])(void) = {
IRQ0_interrupt, IRQ1_interrupt,………………分别指向对应中断号的处理程序。
其中IRQ0_interrupt ,IRQ1_interrupt,等是由BUILD_IRQ宏生成的,你仔细看下就明白了。
所以中断0则从IRQ0_interrupt处执行,即如下:
#define BUILD_IRQ(nr) \
asmlinkage void IRQ_NAME(nr); \
__asm__( \
"\n"__ALIGN_STR"\n" \
SYMBOL_NAME_STR(IRQ) #nr "_interrupt:\n\t" \ //中断后从这里执行.
"pushl $"#nr"-256\n\t" \
"jmp common_interrupt");
2,至于硬件自己在哪指定中断号应该和具体硬件相关,可能有的硬件有寄存器存其需要的中断号(硬件驱动方面还不太了解,不知道对不对),然后其驱动程序通过request_irq向内核申请使用该中断.
3.,中断处理例程是直接进入内核空间处理
不太懂什么叫上下文 |
|