如何在内核代码中生成内核oops或崩溃?那是否有功能?
答案 0 :(得分:8)
崩溃内核的常用方法是使用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;
}
处理程序设置全局标志以对陷阱进行内核恐慌,然后尝试取消引用随机空指针。
答案 1 :(得分:0)
panic()
功能
如果你想在内核模块代码中执行它,内核也有一个panic()
函数:
#include <kernel.h>
panic("my message");
它定义在kernel/panic.c。
相关主题: