2

linux内核文件arch/x86/kernel/entry_64.S中的指令{interrupt do_IRQ}是什么意思?中断是指令还是宏?定义在哪里?如何使用它 ?

847 common_interrupt: 
848         XCPT_FRAME    
849         addq $-0x80,(%rsp)              /* Adjust vector to [-256,-1] range */
850         interrupt do_IRQ
851         /* 0(%rsp): old_rsp-ARGOFFSET */
4

2 回答 2

1

它在上面声明了很短的距离:

/* 0(%rsp): ~(interrupt number) */
    .macro interrupt func
    /* reserve pt_regs for scratch regs and rbp */
    subq $ORIG_RAX-RBP, %rsp
    CFI_ADJUST_CFA_OFFSET ORIG_RAX-RBP
    call save_args
    PARTIAL_FRAME 0
    call \func
    .endm

不过,我不知道那是做什么的。:-)

于 2012-11-06T02:38:52.063 回答
0

中断基本上用于暂停当前中断的 cpu 内核上运行的所有当前进程,然后运行生成的中断相关工作。&中断相关的工作是通过注册的处理程序或函数完成的。

中断可能由 H/W 或 S/W 产生。基本上有两种类型的中断...1-)软中断和2-)硬中断。

因此,每当生成特定中断时,都会调用其处理程序或函数,并且此调用与函数do_IRQ(struct pt_regs *regs)中传递的参数有关,该参数是 pt_regs 结构类型,它基本上将寄存器值存储为...

struct pt_regs{
unsigned long r0;
unsigned long r1;
...
...
};

& 更多信息你可以点击这个链接https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_MRG/1.3/html/Realtime_Reference_Guide/chap-Realtime_Reference_Guide-Hardware_interrupts.html

于 2012-11-06T06:20:57.353 回答