我该如何在内核代码中生成kernel oops或崩溃?是否有相应的函数可以实现?
BUG()
宏。还有一个WARN()
宏,会将堆栈转储到控制台,但内核仍然继续运行。
http://kernelnewbies.org/FAQ/BUG
当内核触发BUG()
宏(最终导致内部陷阱)或类似错误条件(如空指针解引用)时,接下来会发生什么取决于panic_on_oops
全局变量的设置。如果设置为0,则内核将尝试继续运行(带有任何可怕的后果)。如果设置为1,则内核将进入紧急状态并停止。<SysRq> + <c>
组合键(或者,替代方法是 echo c > /proc/sysrq-trigger
)。值得查看此操作的处理程序实现(http://code.metager.de/source/xref/linux/stable/drivers/tty/sysrq.c#134):static void sysrq_handle_crash(int key)
{
char *killer = NULL;
panic_on_oops = 1; /* force panic */
wmb();
*killer = 1;
}
panic()
函数
如果您想在内核模块代码中执行它,内核还有一个panic()
函数:
#include <kernel.h>
panic("my message");
这个定义在kernel/panic.c中。
这里有一个最小可运行示例。
相关主题: