Linux kernel IDT和IRQ之间有什么联系?

Linux kernel IDT和IRQ之间有什么联系?,linux-kernel,interrupt,Linux Kernel,Interrupt,我想截取内核中的一些中断,然后用我的一些代码包装原始函数。主要用于学习目的 我已经知道如何通过IDT(中断描述符表)截获页面错误和双重错误,并且它工作得很好 现在我想截取RTC,在IRQ 8。我没有找到任何具体的内容,但是在阅读了一些代码之后,我认为IRQ在IDT中,并且它从第32个条目开始(在codeIRQ=IDT+32;中)。因此,我运行了一个示例,其中我更改了IDT的第40个条目,但什么也没发生。(以防万一,我在更改0x3a条目时再次运行了它,即使我很确定它是十进制的,也没有发生任何事情。

我想截取内核中的一些中断,然后用我的一些代码包装原始函数。主要用于学习目的

我已经知道如何通过IDT(中断描述符表)截获页面错误和双重错误,并且它工作得很好

现在我想截取RTC,在IRQ 8。我没有找到任何具体的内容,但是在阅读了一些代码之后,我认为IRQ在IDT中,并且它从第32个条目开始(在code
IRQ=IDT+32;
中)。因此,我运行了一个示例,其中我更改了IDT的第40个条目,但什么也没发生。(以防万一,我在更改0x3a条目时再次运行了它,即使我很确定它是十进制的,也没有发生任何事情。)

所以我的问题是:

  • IRQ=IDT+32对吗?(如果没有,发送IRQ的表格在哪里?)
  • 在拦截RTC后,我期待内核崩溃是对的吗?(我只是将其重定向到一个只打印“Hello,World!”的函数)

如果有必要,我的测试将在虚拟机中运行。我在64位机器上运行LinuxMint(gust&host)。主机有Windows 7。

如果您试图从中断状态重新进入内核,例如尝试打印某个东西,(它将打印到哪里?),我真的看不出这一切进展顺利:)我想使用
printk
将其打印到内核环形缓冲区。在我让它工作一段时间后,我查看了
dmesg
,看到了我的设置打印,但没有从IDT中现在的函数打印。