首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Linux上获取中断向量编号?

如何在Linux上获取中断向量编号?
EN

Stack Overflow用户
提问于 2012-07-08 08:05:00
回答 1查看 4.2K关注 0票数 2

当我运行"cat /proc/interrupts“时,我可以得到以下结果:

代码语言:javascript
复制
           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”等的中断号?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-08 12:49:01

在x86上,NMIs始终处于中断向量2。该数字是硬编码的,就像常见的异常(被0除以、页面错误等)一样。您可以在英特尔/AMD的CPU文档中找到这一点。

如果启用了APIC (如问题中的转储所示),则可以从APIC的SVR寄存器中获取伪中断的中断向量编号。同样,请参阅相同的CPU文档。

如果APIC未启用,而是使用PIC,则虚假中断将以IRQ7的形式提供(有关这一点,请参阅8259A PIC芯片规范)。BIOS以这样的方式对PIC进行编程,即IRQ7是中断向量0Fh,但是Windows和Linux改变了这种映射,以避免为IRQ和CPU异常共享相同的中断向量。似乎无法从PIC查询此映射,但它是通过向PIC发送初始化控制字2 (ICW2)来建立的。下面是init_8259A()中的相关Linux代码片段

代码语言:javascript
复制
    /* 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中找到它们的中断向量,就像上面的伪中断一样。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11379668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档