中断处理程序异步发生,因此无法被其他函数调用。那么,为什么linux内核中的中断处理程序返回一个值?如何将输入参数传递给它?
答案 0 :(得分:4)
由于几个原因,中断处理程序具有返回值。
答案 1 :(得分:1)
中断处理程序不是中断向量。中断向量是处理器在触发中断时跳转到的代码。这是一个严格的简化,但它的外观如下:
interrupt_vector {
num = check_interrupt_number()
f = get_interrupt_handler_func(num);
d = get_interrupt_handler_data(num);
/* call interrupt handler */
ret = f(d);
}
因此处理程序和数据一起注册,中断向量代码调用registererd处理程序,传递已注册的数据,并检查返回值。 当然,这里我们有一个级别的处理程序,但你可以有几个,例如一个处理器用于所有PCI Irq,它依次检查特定PCI irq的注册处理程序,并最终调用它传递注册数据等。
当然,实际代码往往要复杂得多。您可以尝试使用此lxr link来浏览Linux内核源代码
答案 2 :(得分:0)
中断向量代码与多个连接的中断处理程序(特定于操作系统)到 中断处理程序可以返回一个值(通常进入x86上的EAX等寄存器),因此向量代码可以管理一系列处理程序。