【发布时间】:2021-01-13 21:22:09
【问题描述】:
不知道是不是和SO有关。我知道当我使用 Linux 内核 panic 函数时,它的工作是冻结我的系统,但它需要 1 参数,即 消息。如果我的系统完全死机并且我通过按住电源关闭按钮强制关闭我的电脑,我在哪里可以实际看到 消息?
main.c
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h> // panic
MODULE_LICENSE("GPL");
static int __init initialization_function(void)
{
panic("Module: my message!\n");
return 0;
}
static void __exit cleanup_funcion(void)
{
printk(KERN_INFO "Module: Cleanup done, exiting.\n");
}
module_init(initialization_function);
module_exit(cleanup_funcion);
顺便说一句,我不知道如何才能看到实际的 oops 消息,在哪里以及如何才能看到它?
【问题讨论】:
-
很可能您打开了图形管理器,因此它不会显示缓冲区消息。登录其中一个 tty(例如 ctrl+alt+F2),确保您会在那里看到它,或者打开终端并输入
dmesg -wH或journalctl -f以跟踪日志。 -
通常在控制台上(“视频”(可能带有帧缓冲区)或串行)。它可能会进入内存,以便在下次启动时,内核驱动程序和某些程序可以检索它,以进行进一步处理。
-
@GiacomoCatenazzi,你的意思是持久的 UEFI 内存吗?重启后会写在哪里?
-
@AlexeiMartianov:不,普通 RAM。 RAM 在重新启动时不会重置,因此它只是内核为恐慌保留了一小部分 ram,以及一个检索它的程序。驱动程序没有什么异常(保留 RAM,也可以提前保留,以防内存映射到 IO)。
-
@GiacomoCatenazzi,也许是特定于硬件的,您想到的是哪种硬件?问题没有提到硬件,只有Linux。 en.wikipedia.org/wiki/Reset_button: "在个人电脑上,[NB 1] 重置按钮清除内存"。
标签: c linux-kernel panic