中断向量和中断函数
从中断向量初始化开始
start_kernel()
init_IRQ()
native_init_IRQ()
idt_setup_apic_and_irq_gates()
idt_setup_from_table(idt_table, apic_idts, ARRAY_SIZE(apic_idts), true);
for_each_clear_bit_from(i, system_vectors, FIRST_SYSTEM_VECTOR) {
entry = irq_entries_start + 8 * (i - FIRST_EXTERNAL_VECTOR);
set_intr_gate(i, entry);
}ENTRY(irq_entries_start)
vector=FIRST_EXTERNAL_VECTOR
.rept (FIRST_SYSTEM_VECTOR - FIRST_EXTERNAL_VECTOR)
UNWIND_HINT_IRET_REGS
pushq $(~vector+0x80) /* Note: always in signed byte range */
jmp common_interrupt
.align 8
vector=vector+1
.endr
END(irq_entries_start)do_IRQ后断掉的线索
pci设备注册中断处理的一种情况
从request_irq()入手
pci_host_bridge->map_irq()
irq_domain->map()
chip_types->handler
粗略的一张图
Last updated