软件中断

时间:2010-08-14 06:37:06

标签: c interrupt

如何在C中编程软件中断?我知道需要编写一个中断服务程序,然后中断CPU以便可以调用例程,但我不知道如何在C中执行该操作。此外,我不知道如何使用中断描述符注册该例程表。 我有一个x86-64 CPU(AMD Turion64 X2),我正在使用gcc编译器。 任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:3)

中断的概念不包含在C规范中(并且也有点特定于处理器)。大多数编译器(包括GCC)允许您编写内联汇编代码(或者您当然可以将汇编编写的文件链接到您的程序)。但最大的问题是常见的操作系统(尤其是那些以64位模式运行的操作系统)不会让你改变中断表。我想你最好的办法是寻找一个简单的开源操作系统,并从普通程序安装你的中断处理程序(如果操作系统允许)或者将你的代码添加到内核中。您不能在处理器模拟器(或虚拟机)中运行一小段代码的原因是处理器需要相当多的设置才能进入64位模式。有关如何更改中断表的确切详细信息取决于该设置。

答案 1 :(得分:1)

操作系统隐藏了应用程序的实际中断。据我所知,除非你在内核层运行(环0?)

,否则不可能

答案 2 :(得分:0)

写作ISR不是语言问题。是的,你可以在C中完成。

了解您的操作系统内核,关于调用在GIC或其他中断控制器的某个中断线上注册ISR的例程,并在中断描述符表中创建一个条目。 与ARM上的Linux一样..它的request_irq()用IRQ控制器注册一个ISR并在IRQ_DESC表中创建一个条目。

因此,建议首先检查各自操作系统的ISR框架。

答案 3 :(得分:-1)

使用sigaction。请参阅man 2 sigaction

要导致中断,请使用raisekill