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 */
答案 0 :(得分: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
但是,我不知道那是做什么的。 : - )
答案 1 :(得分: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