簡體   English   中英

如何在 Linux 上獲取中斷向量號?

[英]How do I get the interrupt vector number on Linux?

當我運行“cat /proc/interrupts”時,我可以得到以下信息:

           CPU0       CPU1
  0:        253       1878   IO-APIC-edge      timer
  1:          3          0   IO-APIC-edge      i8042
  7:          1          0   IO-APIC-edge      parport0
  8:          0          1   IO-APIC-edge      rtc0
  9:          0          0   IO-APIC-fasteoi   acpi
 12:          1          3   IO-APIC-edge      i8042
 16:     681584         60   IO-APIC-fasteoi   uhci_hcd:usb3, nvidia
 17:          0          0   IO-APIC-fasteoi   uhci_hcd:usb4, uhci_hcd:usb7
 18:          0          0   IO-APIC-fasteoi   uhci_hcd:usb8
 22:          2          1   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb5
 23:         17         17   IO-APIC-fasteoi   ehci_hcd:usb2, uhci_hcd:usb6
 44:     146232     472747   PCI-MSI-edge      ahci
 45:        118        115   PCI-MSI-edge      snd_hda_intel
 46:   10038650        842   PCI-MSI-edge      eth1
NMI:      44479      43798   Non-maskable interrupts
LOC:   19025635   29426776   Local timer interrupts
SPU:          0          0   Spurious interrupts
PMI:      44479      43798   Performance monitoring interrupts
IWI:          0          0   IRQ work interrupts
RES: 3442001789 3442627214   Rescheduling interrupts
CAL:       1406       1438   Function call interrupts
TLB:     781318     792403   TLB shootdowns
TRM:          0          0   Thermal event interrupts
THR:          0          0   Threshold APIC interrupts
MCE:          0          0   Machine check exceptions
MCP:       2063       2063   Machine check polls
ERR:          0
MIS:          0

如何獲取“NMI”“LOC”“SPU”“PMI”等中斷號

在 x86 上, NMIs始終位於中斷向量 2 上。該數字與常見異常(除以 0、頁面錯誤等)一樣是硬編碼的。 您可以在 Intel/AMD 的 CPU 文檔中找到它。

如果APIC已啟用(如問題中提供的轉儲中的情況),則可以從 APIC 的SVR寄存器中獲取虛假中斷的中斷向量編號。 同樣,請參閱相同的 CPU 文檔。

如果未啟用APIC而是使用PIC ,則虛假中斷將作為IRQ7 (請參閱8259A PIC 芯片規范)。 BIOS以 IRQ7 為中斷向量0Fh的方式對 PIC 進行編程,但 Windows 和 Linux 更改此映射以避免共享相同的 IRQ 和 CPU 異常中斷向量。 似乎無法從 PIC 查詢此映射,但它是通過向 PIC 發送初始化控制字 2 ( ICW2 ) 來建立的。 這是init_8259A()的相關 Linux 代碼:

    /* ICW2: 8259A-1 IR0-7 mapped to 0x30-0x37 on x86-64,
       to 0x20-0x27 on i386 */
    outb_pic(IRQ0_VECTOR, PIC_MASTER_IMR);

那應該回答虛假中斷向量部分。

至於LOCPMI ,我認為,這些是本地 APIC 的中斷,您可以從 APIC 中找到它們的中斷向量,就像上面的虛假中斷一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM